2012-08-07 1 views
12

皆さん、 私たちは、Apacheは次のシナリオのためにリバースプロキシを設定しようとしていると:ProxyPassMatchにProxyPassReverse

  • 着信要求はURLが言う、差分バージョンを参照しますいくつかのサーバーでは、フォームhttp://foo.com/APP/v1/main.html
  • を取り、 http://foo.com/APP/v2/main.html
  • 上流ロードバランサ(HAProxy)が要求を適切なサーバーに送信します。このサーバーには、Apache2リバースプロキシがJBossサーバーの前に配置されます。リクエストは、Apache 2で現れたとき
  • は、それは我々がhttp://localhost:8080/AppContext/main.htmlに出(リバース)プロキシにそれをしたい/APP/v1/main.html
  • よう要求パス、かかわらず URLでバージョンフラグメント(V1、V2、など)のを持っています。

私はそうのようにこれを実行しようとしている:

ProxyPassMatch ^/.*?/APP.*?/(.*)$ http://localhost:8080/AppContext/$1 
ProxyPassReverse /APP http://localhost:8080/AppContext 

は、私の質問は以下のとおりです。

  1. ProxyPassMatchの私の使用は正しいですか?
  2. 私のProxyPassReverseは「静的」です。 /APPの後に潜在的に変化するものを認識させるにはどうすればよいですか?

ありがとうございました。

-Raj

答えて

8

あなたは近いです、バージョンフラグメントを考慮するために、正規表現を少し変更してみてください:

ProxyPassMatch ^/.*?/APP.*?/v[0-9]+/(.*)$ http://localhost:8080/AppContext/$1 

ProxyPassReverseはオンザフライ場所の書き換えを保証するために、ほとんどですプロキシされたアプリケーションによって与えられた応答のヘッダーフィールド。したがって、例えばhttp://localhost:8080/AppContext/somethingに301リダイレクトを返すと、apacheはそれを/APP/v1/somethingに変更することを知っているので、プロキシの背後にある情報は公開されません。リバースプロキシで動的URLを使用しているため、ここでいくつかの選択肢があります。 HAProxyロードバランサに送信することもできます(その場所がわかりません)。または、最適なものを選んで希望することができます。たとえばあなたが、その後など/APP/v1//APP/v2//APP/v3/、に要求を送信/APP/balancer/でロードバランサを使用している場合、その後、あなたがこれを行うことができます:

ProxyPassReverse /APP/balancer http://localhost:8080/AppContext 

そうしないと、あなただけのものにそれをポイントしてを期待することができます最高:

ProxyPassReverse /APP/v1 http://localhost:8080/AppContext 
+0

ありがとうございました。私たちは、クラスタに自由にデプロイできる均質なテンプレートを持つために、Apacheの設定にバージョン固有のエントリがないようにしています。 ProxyPassReverseのことを確実に行うことができないようです。何かの書き換えモジュールでこれを達成することをお勧めしますか? – Raj

+0

@Rajリライトは他の方向にあるので、助けにはなりません。アプリケーションサーバーはリクエストをリダイレクトしようとしますが、アクセスに使用されている実際のURLについては何も知らないので、ブラウザには「http:// localhost:8080/AppContext/something」と表示されます。ブラウザー上にあるコンピューターにlocalhostポート8080で実行されているアプリケーションサーバーがないため、404が返されます –

関連する問題