下面是一个使用 golang httputil.NewSingleHostReverseProxy 的简单案例:
假设我们有一个本地的 web 服务在 http://localhost:8080 上运行,而我们希望将所有对 http://example.com 的请求代理到这个本地的服务上。
代码实现如下:
package main
import (
"log"
"net/http"
"net/http/httputil"
"net/url"
)
func main() {
// 创建一个反向代理对象
targetURL, _ := url.Parse("http://localhost:8080")
proxy := httputil.NewSingleHostReverseProxy(targetURL)
// 将所有请求转发到反向代理上
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
// 在请求头中设置 Host 字段,否则反向代理会无法处理该请求
r.Host = targetURL.Host
proxy.ServeHTTP(w, r)
})
log.Fatal(http.ListenAndServe(":80", nil))
}
在上面的代码中,我们首先创建了一个反向代理对象,并设置其目标地址为 http://localhost:8080。然后,在处理所有请求的回调函数中,我们修改了请求头中的 Host 字段,并将请求转发给反向代理处理。
最后,我们启动了一个监听 80 端口的 HTTP 服务器,并将所有请求转发到反向代理上。