64

Apache ドキュメントのReverse Proxy Request HeadersセクションやX-Forwarded-For に関するウィキペディアの記事X-Forwarded-*など、ヘッダー に関する興味深い読み物を見つけました。

という事は承知しています:

  • X-Forwarded-Forプロキシに接続したクライアントのアドレスを与える
  • X-Forwarded-Portプロキシでクライアントが接続しているポートを指定します (例:80または443) 。
  • X-Forwarded-Protoクライアントがプロキシへの接続に使用したプロトコルを与える (httpまたはhttps)
  • X-Forwarded-HostHostクライアントがプロキシに送信したヘッダーの内容を示します。

これらはすべて理にかなっています。

ただし、実際の使用例はまだわかりませんX-Forwarded-Host。別のポートまたは別のスキームを使用して接続を繰り返す必要があることは理解していますが、ターゲット サーバーへの要求を繰り返すときにプロキシ サーバーがHostヘッダーを変更するのはなぜですか?

4

7 に答える 7

26

Apigeeのようなフロントエンド サービスをAPI のフロントエンドとして使用する場合、API への接続に使用されたホスト名を理解するために、X-FORWARDED-HOST のようなものが必要になります。これは、Apigee がバックエンド DNS で構成されるためです。つまり、nginx とアプリ スタックは、最初に呼び出されたホスト名ではなく、ホスト ヘッダーのみをバックエンド DNS 名として認識します。

于 2014-01-28T19:06:38.930 に答える
19

これは私が今日取り組んだシナリオです: ユーザーは、リバース プロキシを指す" https://neaturl.company.com " URL を使用して特定のアプリケーション サーバーにアクセスします。次に、プロキシは SSL を終了し、ユーザーの要求を「 http://192.168.1.1:5555 」の URL を持つ実際のアプリケーション サーバーにリダイレクトします。問題は、アプリケーションサーバーが絶対パスを使用して同じサーバー上の他のページにユーザーをリダイレクトする必要がある場合、後者の URL を使用していたため、ユーザーはこれにアクセスできないことです。X-Forwarded-Host (+ X-Forwarded-Proto および X-Forwarded-Port) を使用すると、プロキシは、ユーザーが最初に使用した URL をアプリケーション サーバーに伝えることができるため、サーバーは応答で正しい絶対パスを生成し始めました。

この場合、アプリケーション サーバーを停止して絶対 URL を生成したり、「パブリック URL」を手動で構成したりするオプションはありませんでした。

于 2015-05-14T22:13:41.120 に答える
3

一例として、特定のホストをブロックし、それらを外部ブロック ページにリダイレクトするプロキシが考えられます。実際、私の学校のフィルターがこれを行っていることはほぼ確実です…</p>

(そして、一部のサーバー[Nginx?]が間違ったトラフィックを拒否するため、オリジナルHostをそのまま渡さない可能性がある理由。)HostHost

于 2013-09-29T23:11:59.107 に答える
3

X-Forwarded-Host は私の命を救ってくれました。CDN (または「ツリー」に移動する場合はリバース プロキシ) は、ユーザーが使用する Host ヘッダーによって使用するオリジンを決定します。したがって、CDN はオリジンに連絡するために同じ Host ヘッダーを使用できません。そうしないと、CDN はオリジンに行くのではなく、ループ内でそれ自体に行きます。したがって、CDN は IP アドレスまたはダミーの FQDN のいずれかを、オリジンからコンテンツを取得するホスト ヘッダーとして使用します。ここで、オリジンは、コンテンツが要求されている Host ヘッダー (別名 Web サイト名) を知りたい場合があります。私の場合、1 つのオリジンが 2 つの Web サイトにサービスを提供していました。

于 2015-09-29T00:17:46.843 に答える
0

別のシナリオでは、ホスト URL にアプリのライセンスを付与し、n > 1 サーバー間で負荷を分散したいと考えています。

于 2015-11-13T09:17:26.743 に答える