私のウェブホストには2つのプロキシパスルールがあります。1つはキャッシュの目的でローカルワニスインスタンスをポイントし、これをProxyPreserveHostを有効にし、もう1つはサードパーティのホストサイトをポイントし、ProxyPreserveHostを無効にします。とにかくルール/パスごとにこれを行うことができますか?
Apache 2.2では、いいえ-ProxyPreserveHost
ディレクティブは サーバー構成または仮想ホストコンテキストでのみ有効 ;別の仮想ホストにある別のProxyPass
ステートメントが必要です。
Apache 2.4では、はい- ディレクティブにディレクトリコンテキストが追加されています なので、次のようなことができます。
<Location /to-varnish/>
ProxyPreserveHost On
ProxyPass http://127.0.0.1:8000/to-varnish/
</Location>
<Location /to-third-party/>
ProxyPreserveHost Off
ProxyPass http://third-party-site.com/
</Location>
あなたはRequestHeaderの助けを借りてすることができます
ProxyPreserveHost On
<LocationMatch third-party-pattern>
RequestHeader set Host third-party-vhost-name
ProxyPassMatch http://third-party-server
</LocationMatch>
<LocationMatch varnish-pattern>
ProxyPassMatch http://varnish-server
</LocationMatch>
ソリンの返答に賛成できない...
Apache 2.2を実行しているローカルの状況で、プライマリアプリはログインするためにproxypreservehost(CQ/AEM作成者)を必要としますが、プロキシするパートナーはHostヘッダーにHostを必要とします。
ただし、正規表現でこれを行う必要はありません。通常の<Location...>
正常に動作します。
ドキュメントから( http://httpd.Apache.org/docs/2.2/mod/core.html#location ):
ディレクティブは、囲まれたディレクティブのスコープをURLで制限します。
このソリューションは私たちにとってうまくいきます:
<Location /[path]/ >
RequestHeader set Host [thirdparty]
</Location>
RewriteRule ^/[path]/(.*) https://[thirdparty]/$1 [P,NC,L]
これにより、このリクエストのホストヘッダーがパートナーのホスト名に設定されます。
それが整ったら、引き続きCQ/AEM作成者にログインし、予想されるホストヘッダーを使用してパートナーサービスにプロキシできます。