1 回答

TA貢獻1811條經驗 獲得超6個贊
我相信你有兩個選擇。
1.實施http.RoundTripper
您實現自己的RoundTripper并在那里重新設置X-Forwarded-For。(示范)
type MyRoundTripper struct{}
func (t *MyRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
req.Header["X-Forwarded-For"] = []string{"1.2.3.4"}
return http.DefaultTransport.RoundTrip(req)
}
func main() {
http.ListenAndServe(":80", &httputil.ReverseProxy{
Director: director,
Transport: &MyRoundTripper{},
})
}
當Transport未設置該字段時,httputil.ReverseProxy它會回退到http.DefaultTransport,因此您也可以在自定義代碼后回退到它。
2.取消設置req.RemoteAddr
RemoteAddr在調用反向代理之前重置原始請求的字段。該字段由 HTTP 服務器設置,如果存在,將觸發X-Forwarded-For反向代理實現中的替換。(示范)
func main() {
http.ListenAndServe(":80", func(w http.ResponseWriter, r *http.Request) {
r.RemoteAddr = ""
proxy := &httputil.ReverseProxy{ Director: director }
proxy.ServeHTTP(w, r)
})
}
但是,此行為依賴于實現細節,將來可能會或可能不會更改。我建議改用選項 1。
- 1 回答
- 0 關注
- 170 瀏覽
添加回答
舉報