使用Apache ProxyPass的反向代理重定向而不是透明地传递

时间:2012-05-25 08:58:26

标签: apache2 reverse-proxy httpd.conf proxypass

我在http://<server>:8080/app/portal/的Tomcat内部运行了一个Web应用程序。 我希望世界通过网址http://<server>/portal/看到此应用程序。

为此,我使用Apache 2.2设置了反向代理。根据{{​​3}},我希望反向代理透明地传递所有请求。我的浏览器永远不应该知道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暂时移动,所有后续调用从我的浏览器直接转到http://<server>:8080/app/portal/。我的浏览器指向此网址。

这不是我对反向代理的期望。我的配置是错误的还是我误解了反向代理的目的?我该怎么做才能达到我想要的行为?

3 个答案:

答案 0 :(得分:5)

我试图评论来自davidethell的答案,但无法正确格式化这些行,所以这是我发现的:

问题在于,反向代理似乎只适用于在我的Tomcat中部署War的URL,而不适用于Tomcat中的servlet。这会导致2次重写,其中一次是反向代理,另一次只是重写后面的所有内容。

RewriteEngine On
RewriteRule   ^/portal/$ /portal/portal
RewriteRule   ^/portal(.+) http://<server>:8080/app$1 [P]

答案 1 :(得分:5)

您忘记在反向代理配置中添加以下选项:

ProxyPreserveHost On

您可以使用Url重写实现相同的行为,但不建议在文档中使用。

答案 2 :(得分:1)

您是否尝试过使用mod_rewrite代理选项代替ProxyPass?类似的东西:

RewriteRule ^$ http://server:8080/app/portal/ [P]