web-dev-qa-db-ja.com

ProxyPassReverseを使用したProxyPassMatch

皆さん、私たちは次のシナリオのためにApacheリバースプロキシをセットアップしようとしています。

  • 受信リクエストはhttp://foo.com/APP/v1/main.htmlの形式を取ります
  • 一部のサーバーでは、URLは異なるバージョンを参照します。たとえば、http://foo.com/APP/v2/main.html
  • アップストリームロードバランサー(HAProxy)は、JBossサーバーの前にApache2リバースプロキシがある適切なサーバーにリクエストを送信します。
  • リクエストがApache 2に表示されると、/APP/v1/main.htmlのようなリクエストパスになります。
  • http://localhost:8080/AppContext/main.htmlrerespective URL(v1、v2など)のバージョンフラグメントのプロキシを(リバース)する必要があります。

私はこれをそうしようとしています:

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

私の質問は:

  1. 私のProxyPassMatchの使用は正しいですか?
  2. 私のProxyPassReverseは「静的」です。 /APPの後に、変数の可能性があるものを認識させるにはどうすればよいですか?

洞察をありがとう。

-ラージ

16
Raj

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

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

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

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

それ以外の場合は、それを1つだけ指定して、最善の結果を期待できます。

ProxyPassReverse /APP/v1 http://localhost:8080/AppContext
9
Jon Lin