11

でTomcat内で実行されているWebアプリケーションを入手しましたhttp://<server>:8080/app/portal/。このアプリケーションをURLで世界に見てもらいたいhttp://<server>/portal/

これを行うために、Apache2.2でリバースプロキシを設定しました。ProxyPassのドキュメントによると、リバースプロキシがすべてのリクエストを透過的に通過させることを期待しています。私のブラウザはTomcatのURLを知る必要はありません。

これが私の設定です:

仮想ホストはありません。これらの行をhttpd.confに追加しました

<Location /portal/>
    AllowOverride All
    RewriteEngine On
    ProxyPass  http://server:8080/app/portal/
    ProxyPassReverse http://server:8080/app/portal/
 </Location>

Firefoxを使用して開くhttp://<server>/portal/と、302 Moved Temporarilyが表示され、すべてのフォローアップ呼び出しはブラウザから直接に送信されhttp://<server>:8080/app/portal/ます。私のブラウザはこのURLを指しています。

これは、私がリバースプロキシに期待したものではありません。構成を間違えましたか、それともリバースプロキシの目的を誤解しましたか?希望する動作を得るにはどうすればよいですか?

4

3 に答える 3

5

davidethellからの回答にコメントしようとしましたが、行を正しくフォーマットできなかったため、次のことがわかりました。

問題は、リバースプロキシがTomcatでWarがデプロイされているURLに対してのみ機能し、Tomcat内のサーブレットに対しては機能しないように見えることでした。これにより、2つの書き換えが発生します。1つはリバースプロキシで、もう1つはその背後にあるすべてを書き換えるだけです。

RewriteEngine On
RewriteRule   ^/portal/$ /portal/portal
RewriteRule   ^/portal(.+) http://<server>:8080/app$1 [P]
于 2012-05-31T12:03:41.160 に答える
4

リバースプロキシ構成に次のオプションを追加するのを忘れました。

ProxyPreserveHost On

URL書き換えでも同じ動作を実現できますが、ドキュメントでは推奨されていません。

于 2014-09-08T08:48:34.340 に答える
1

ProxyPassの代わりにmod_rewriteProxyオプションを使用してみましたか?何かのようなもの:

RewriteRule ^$ http://server:8080/app/portal/ [P]
于 2012-05-25T10:23:32.417 に答える