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

Mat*_*pka 9 reverse-proxy apache2 httpd.conf proxypass

我在Tomcat中运行了一个Web应用程序http://<server>:8080/app/portal/.我希望世界通过URL看到这个应用程序http://<server>/portal/.

为此,我使用Apache 2.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>
Run Code Online (Sandbox Code Playgroud)

当我使用Firefox打开时http://<server>/portal/,我得到一个302 Moved Temporarily,所有后续调用从我的浏览器直接进入http://<server>:8080/app/portal/.我的浏览器指向此URL.

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

Mat*_*pka 5

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

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

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


小智 5

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

ProxyPreserveHost On
Run Code Online (Sandbox Code Playgroud)

您可以使用网址重写实现相同的行为,但是在文档中不建议这样做。