Apache.orgの定義によると:
このディレクティブを使用すると、Apache httpdはHTTPリダイレクト応答のLocation、Content-Location、およびURIヘッダーのURLを調整できます。これは、Apache httpdがリバースプロキシ(またはゲートウェイ)として使用され、リバースプロキシの背後にあるバックエンドサーバー上のHTTPリダイレクトが原因でリバースプロキシがバイパスされるのを避けるために不可欠です。
上記で具体的に説明したHTTP応答ヘッダーのみが書き換えられます。 Apache httpdは他の応答ヘッダーを書き換えたり、デフォルトでHTMLページ内のURL参照を書き換えたりしません。つまり、プロキシされたコンテンツに絶対URL参照が含まれている場合、プロキシはバイパスされます。プロキシと一致するようにHTMLコンテンツを書き換えるには、mod_proxy_htmlをロードして有効にする必要があります。
pathはローカル仮想パスの名前です。 urlは、リモートサーバーの部分的なURLです。これらのパラメーターは、ProxyPassディレクティブと同じ方法で使用されます。
誰か私にそれがどのように機能するか説明してくれませんか?一般に、このディレクティブは何をしますか?
実際にリクエストを処理するサーバーがそのサーバー上の別のURLにリダイレクトする場合、ProxyPassReverse
ディレクティブはリバースプロキシサーバーの観点からURLを書き換えます。たとえば、次の場合、Apache documentation に記載されています。
http://reverseproxy.com/mirror/foo/bar
に送信されます(逆プロキシ)
http://backend.example.com/bar
処理用ですが、バックエンドサーバーでは、正しいURLがquux
である必要があると判断されます。つまり、リクエストは
http://backend.example.com/quux
ProxyPassReverse
ディレクティブは、URLを(リバースプロキシで)に書き換えます。
http://reverseproxy.com/mirror/foo/quux
hTTPリダイレクト応答をクライアントに転送する前。このようにして、クライアントはリバースプロキシサーバーについてのみ認識しますが、それでもhttp://reverseproxy.com/mirror/foo/quux
の正しいURLに必要な要求を行うことができます。このURLは、バックエンドサーバーに逆プロキシされ、通常どおり処理されます。つまり、リバースプロキシがHTTPリダイレクト応答で正しいURIヘッダーを返すことを許可するだけです。
バックエンドから生成されたLocation:ヘッダーが、それ自体に戻るのではなく、リバースプロキシを指すように変更されるようにするには、ProxyPassReverseディレクティブが最も必要になります。
ProxyPass "/" " http://www.example.com/ "
ProxyPassReverse "/" " http://www.example.com/ "
クライアントと2つのサーバー(プロキシとオリジン)があり、オリジンが実際の作業(応答の生成)を行い、プロキシがオリジンへのリクエストをプロキシするだけの場合、適切なサーバーアーキテクチャは次の場合です。
Originがプロキシについて知らない場合可能性がありますOriginがクライアントにプロキシ経由のHTTPリダイレクト(HTTP 301または302)を返し、それがを直接指しますそれ自体、Origin。また、ブラウザが次のラウンドで直接Originに接続するため、これは問題です。これは、ポイント2に違反します。
HTTPリダイレクト応答がクライアントに向けてプロキシに戻ると、プロキシはそれらのリダイレクトを変更できるため、ロケーションが引き続きプロキシを指すようにする必要があります。このように、プロキシが適切に構成されている限り、プロキシを認識しないOriginで実行されているスタンドアロンアプリケーションは、リダイレクトURLを生成できます。