2011-11-15 24 views
15

modリライトを使用して、アプリケーションのコンテキストルートをマスクしています。例えば、modリライトを使用している場合は、ProxyPassReverseを使用する必要がありますか?

RewriteRule ^/directory/(.*) balancer://appcluster/directory/$1 [P] 

appclusterは次のようになります。

<Proxy balancer://appcluster> 
BalancerMember http://localhost:8080/App route=app_01 keepalive=On loadfactor=1 ttl=300 min=3 smax=5 max=15 

ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid timeout=120 nofailover=On 
</Proxy> 

は、私はまったくProxyPassReverseを使用する必要がありますか?

ProxyPass /App balancer://appcluster lbmethod=byrequests stickysession=JSESSIONID|jsessionid timeout=120 nofailover=On 

ProxyPassReverse /App http://localhost:9013/App 

答えて

47

Apacheがブラウザに送信する前ProxyPassReverseは、アパッチにアプリ(appcluster)によって送られたヘッダを変更するために使用されています。私の古いウェブサーバのコードはこのように見えたので、私はそれを使用するために使用されます。たとえば、アプリケーションがhttp://localhost:9013/にあり、ブラウザを/new_location/にリダイレクトしようとすると、リダイレクトと場所ヘッダーhttp://localhost:9013/new_location/で応答し、Apacheはこれを受け取りブラウザに送信します。問題は、ブラウザが別の場所にいると仮定して、http://localhost:9013/new_location/にリクエストを送信しようとすると、エラーが発生します。

ProxyPassReverseは、これらのヘッダーを傍受し、プロキシを実行しているApacheサーバーの外観と一致するように書き換えます。だから私のApacheサーバがhttp://myhost.com/をホスティングしていると私は、アプリケーションがローカルホストの前に座っている場合、http://localhost:9013/App/を指すProxyPassを持っている場合:9013はhttp://localhost:9013/App/new_location/へのリダイレクトを返し、私はそれが前にApacheによってhttp://myhost.com/new_location/に書き換えますようProxyPassReverseを使用する必要がありますリクエストをブラウザに送り返す。

リダイレクトを発行していない場合は問題にはなりませんが、301/302リダイレクトが返された場合にリダイレクトされても問題ありません。限り、mod_rewriteまで、RewriteRuleは、アプリケーションからのリクエストではなく、アプリケーションからのリクエストに適用されます。したがって、それらは相互に排他的な出来事です。

+0

私のプロキシは次のように逆転します:ProxyPassReverse/App/directory http:// localhost:9013/App/directory? –

+0

私はあなたが持っているものが正しいと思います。私は人々が右のURLがローカルドメインでありローカルホストではないような方法でそれを使用するのを見ましたが。私のJbossのデプロイメントでは、ProxyPassReverseを使用しているのと同じように、リダイレクトするだけです。 –

+0

非常にうれしいProxyPassReverseとその必要性についての説明。 @ジョンリン..ありがとう –

関連する問題