首先解释一下反向代理,所谓的反向代理就是代理服务器,充当Web服务器网关的代理服务器。当请求发送到使用反向代理的Web服务器时,他们将先转到反向代理,由该代理将确定是将其路由到制定的Web服务器。
这个程序是将 本地的8086 端口作为代理服务器,代理上篇golang HTTP实例 里面的8090端口
核心只有一个函数 httputil.NewSingleHostReverseProxy
package main
import (
"log"
"net/http"
"net/http/httputil"
"net/url"
)
type ServerHandle struct {
}
func (this *ServerHandle) ServeHTTP(w http.ResponseWriter, r *http.Request) {
remote, err := url.Parse("http://127.0.0.1:8090")
if err != nil {
panic(err)
}
proxy := httputil.NewSingleHostReverseProxy(remote)
proxy.ServeHTTP(w, r)
}
func main() {
err := http.ListenAndServe(":8086", &ServerHandle{})
if err != nil {
log.Fatalln("ListenAndServe: ", err)
}
}
两个服务同时运行
效果如下:
代理服务器访问 8086端口时候
curl http://127.0.0.1:8086/abc
Hello world,/abc!
访问原始的端口8090时候
curl http://127.0.0.1:8090/abc
Hello world,/abc!