17

皆さん、次のシナリオで 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
  • URL のバージョン フラグメント (v1、v2 など)http://localhost:8080/AppContext/main.html関係なく、に (逆に) プロキシする必要があります。

私はこれを次のようにしようとしています:

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

私の質問は次のとおりです。

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

洞察をありがとう。

-ラージ

4

1 に答える 1

10

バージョンフラグメントを考慮して、正規表現を少し変更してみてください。

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

これProxyPassReverseは主に、プロキシされたアプリからの応答に含まれるロケーション ヘッダー フィールドのオンザフライでの書き換えを確実にするためのものです。したがって、たとえば に 301 リダイレクトを返すとhttp://localhost:8080/AppContext/something、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
于 2012-08-07T19:04:11.393 に答える