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

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

王林
王林転載
2024-02-10 08:12:18435ブラウズ

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

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 までご連絡ください。