ホームページ > バックエンド開発 > Golang > リバースプロキシを使用してホストヘッダーを変更できません

リバースプロキシを使用してホストヘッダーを変更できません

王林
リリース: 2024-02-10 08:12:18
転載
477 人が閲覧しました

リバースプロキシを使用してホストヘッダーを変更できません

Web サイトの開発またはメンテナンス中に、リバース プロキシを使用してホスト ヘッダーを変更できないという問題が発生することがあります。これにより、いくつかの問題や制限が生じる可能性があります。この記事では、PHP エディターの Xiaoxin が、この問題が発生する理由とその解決方法を説明します。初心者でも経験豊富な開発者でも、この記事では、この問題を克服し、Web サイト開発作業を正常に完了するのに役立つ解決策とヒントを提供します。

質問内容

バックエンド用のリバース プロキシを構築していますが、ドキュメントに記載されている方法のいずれかを使用してホスト ヘッダーを変更しても理由が​​わかりませんそれは変わりません。 バックエンドには、正しいコンテンツを提供するために実際のホストが必要です。

これはコードです:

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に追加できれば簡単です。 リーリー

詳細については、次の提案を参照してください: net/http/httputil:director を rewrite に置き換えます一个>.

go1.20 にアップグレードできない場合は、director の解決策を次に示します:

リーリー

http.request.host のドキュメントを参照してください:

クライアント要求の場合、ホストは送信されるホスト ヘッダーをオーバーライドすることを選択できます。空の場合、request.write メソッドは url.host の値を使用します。

以上がリバースプロキシを使用してホストヘッダーを変更できませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート