Golang中如何实现反向代理?代码举例讲解

在Golang中,可以使用net/http/httputil包实现反向代理。代码示例:

go
// 定义后端服务器
backend := "http://example.com"

// 创建反向代理
proxy := httputil.NewSingleHostReverseProxy(backend)

// 修改请求头中的host
proxy.ModifyResponse = func(resp *http.Response) error {
    resp.Request.Host = "example.com"
    return nil
}

func main() {
    // 使用标准HTTP处理器启动HTTP服务器
    http.ListenAndServe(":8000", proxy)
}

该示例创建httputil.NewSingleHostReverseProxy进行反向代理,并通过ModifyResponse修改响应请求的host为后端服务器host,从而隐藏真实后端服务器信息。

go
// 客户端请求反向代理
resp, err := http.Get("http://localhost:8000/")

客户端请求反向代理,反向代理再请求后端服务器,并返回响应,实现隐藏后端服务器信息的效果。