反向代理(Reverse Proxy)是指代理服务器接收客户端请求后,将请求转发到其他服务器去获取资源,然后再把获取到的资源返回给客户端。相当于代理服务器代替真正的服务器提供服务。golang可以通过reverseproxy包来实现反向代理功能。
示例代码如下:
package main
import (
"log"
"net/http"
"net/http/httputil"
"net/url"
)
func main() {
targetURL, err := url.Parse("http://example.com")
if err != nil {
log.Fatal(err)
}
proxy := httputil.NewSingleHostReverseProxy(targetURL)
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
log.Printf("Request from %s for %s", r.RemoteAddr, r.URL.Path)
proxy.ServeHTTP(w, r)
})
log.Printf("Listening on :8080")
http.ListenAndServe(":8080", nil)
}
首先,通过url.Parse函数将要代理的URL解析出来。然后,创建一个ReverseProxy指向这个URL,并使用HandleFunc函数将HTTP请求路由到代理服务器上。在HTTP处理函数中,使用ServeHTTP函数将请求转发到目标URL,将目标服务器的响应结果返回给客户端。
需要注意的是,在实际使用中,应该根据代理服务器的需求修改proxy对象的属性,例如修改代理Headers、修改代理Timeout设置等等。