個々のプロキシパスルールのProxyPreserveHost


8

私のWebホストには2つのプロキシパスルールがあります。1つはキャッシュの目的でローカルワニスインスタンスを指し、これをProxyPreserveHostを有効にし、もう1つはサードパーティのホストサイトを指し、ProxyPreserveHostを無効にします。とにかく私はこれをルール/パスごとに行うことができますか?

回答:


13

Apache 2.2では、ProxyPreserveHostno-ディレクティブはサーバー構成または仮想ホストのコンテキストでのみ有効です。異なる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>

3

あなたは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>

0

ソリンの返答に賛成できない...

Apache 2.2を実行しているローカルの状況では、プライマリアプリはログインするためにproxypreservehost(CQ / AEM作成者)を必要としますが、プロキシするパートナーはホストヘッダーにホストを必要とします。

ただし、正規表現を使用してこれを行う必要はありません<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作成者にログインし、予想されるホストヘッダーを使用してパートナーサービスにプロキシできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.