diff --git a/README.md b/README.md index ea17331..671dc81 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,18 @@ # ReverseProxy ReverseProxy in golang + +## Use: + + ./ReverseProxy_[OS]_[ARCH] -h + + Usage of ReverseProxy_[OS]_[ARCH]: + -l string + listen on ip:port (default "0.0.0.0:8888") + -r string + reverse proxy addr (default "http://idea.lanyus.com:80") + + + ./ReverseProxy_windows_amd64.exe -l "0.0.0.0:8081" -r "https://www.baidu.com" + + Listening on 0.0.0.0:8081, forwarding to https://www.baidu.com + diff --git a/main.go b/main.go new file mode 100644 index 0000000..5cd0125 --- /dev/null +++ b/main.go @@ -0,0 +1,36 @@ +package main + +import ( + "log" + "net/http" + "net/http/httputil" + "net/url" + "flag" +) + +type handle struct { + reverseProxy string +} + +func (this *handle) ServeHTTP(w http.ResponseWriter, r *http.Request) { + remote, err := url.Parse(this.reverseProxy) + if err != nil { + log.Fatalln(err) + } + proxy := httputil.NewSingleHostReverseProxy(remote) + r.Host = remote.Host + proxy.ServeHTTP(w, r) + log.Println(r.RemoteAddr + " " + r.Method + " " + r.URL.String() + " " + r.Proto + " " + r.UserAgent()) +} + +func main() { + bind := flag.String("l", "0.0.0.0:8888", "listen on ip:port") + remote := flag.String("r", "http://idea.lanyus.com:80", "reverse proxy addr") + flag.Parse() + log.Printf("Listening on %s, forwarding to %s", *bind, *remote) + h := &handle{reverseProxy: *remote} + err := http.ListenAndServe(*bind, h) + if err != nil { + log.Fatalln("ListenAndServe: ", err) + } +}