我在Tomcat的http://<server>:8080/app/portal/上运行了一个Web应用程序。
我希望全世界都可以通过URL http://<server>/portal/看到此应用程序。

为此,我使用Apache 2.2设置了反向代理。根据documentation for 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移动的临时提示,所有后续调用都从浏览器直接转到http://<server>:8080/app/portal/。我的浏览器指向此URL。

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

最佳答案

我试图评论来自davidethell的答案,但无法正确设置行的格式,因此这是我发现的内容:

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

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

关于apache2 - 带有Apache ProxyPass的反向代理重定向,而不是透明地通过,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10751427/

10-11 10:41