首頁 > 後端開發 > Golang > 我無法使用反向代理更改主機標頭

我無法使用反向代理更改主機標頭

王林
發布: 2024-02-10 08:12:18
轉載
477 人瀏覽過

我無法使用反向代理更改主機標頭

在進行網站開發或維護過程中,有時我們會遇到無法使用反向代理來更改主機標頭的問題。這可能會給我們帶來一些困擾和限制。在這篇文章中,php小編小新將為大家解釋為什麼會出現這個問題,以及如何解決這個問題。無論你是初學者還是有經驗的開發者,本文都將為你提供有用的解決方案和技巧,幫助你克服這個難題,順利完成你的網站開發工作。

問題內容

我正在為我的後端建立一個反向代理,但我不明白為什麼即使我使用我在文件中看到的任何方法更改主機標頭它也不會改變。 後端需要真正的主機才能提供正確的內容。

這是程式碼:

proxy := &httputil.ReverseProxy{
    Director: func(req *http.Request) {
        targetURL := url.URL{
            Scheme: "http",
            Host:   "backend.com",
            Path:   req.URL.Path,
        }

        req.URL.Scheme = targetURL.Scheme
        req.URL.Host = targetURL.Host
        req.URL.Path = targetURL.Path
        req.Header.Set("Host", targetURL.Host)

    },
    Transport: transport,
}

// Listen on a local port and serve the reverse proxy without buffer method
server := &http.Server{
    Addr:    "localhost:8080",
    Handler: proxy,
}
fmt.Println("Listening on :8080...")
err = server.ListenAndServe()
if err != nil {
    fmt.Println(err)
}
登入後複製

解決方法

如果可以使用(*proxyrequest).seturl新增在 go1.20 中,這將很簡單:

proxy := &httputil.reverseproxy{
    rewrite: func(pr *httputil.proxyrequest) {
        targeturl := url.url{
            scheme: "http",
            host:   "backend.com",
            path:   req.url.path,
        }
        pr.seturl(&targeturl)
    },
    transport: transport,
}
登入後複製

有關更多信息,請參閱此提案:net/http/httputil:用 rewrite 替換 director.

如果無法升級到go1.20,這裡有一個針對director的解決方法:

proxy := &httputil.ReverseProxy{
    Director: func(req *http.Request) {
        targetURL := url.URL{
            Scheme: "http",
            Host:   "backend.com",
            Path:   req.URL.Path,
        }

        req.URL.Scheme = targetURL.Scheme
        req.URL.Host = targetURL.Host
        req.URL.Path = targetURL.Path
-       req.Header.Set("Host", targetURL.Host)
+       req.Host = targetURL.Host
+       // or simply:
+       // req.Host = ""
    },
    Transport: transport,
  }
登入後複製

請參閱 http.request.host 的文件:

對於客戶端請求,主機可以選擇覆蓋要傳送的主機標頭。如果為空,request.write 方法將使用 url.host 的值。

以上是我無法使用反向代理更改主機標頭的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板