Apache2 使用Apache ProxyPass的反向代理重定向,而不是透明地通过

Apache2 使用Apache ProxyPass的反向代理重定向,而不是透明地通过,apache2,reverse-proxy,httpd.conf,proxypass,Apache2,Reverse Proxy,Httpd.conf,Proxypass,我在Tomcat中运行了一个web应用程序,位于http://:8080/app/portal/。 我希望全世界都能通过URLhttp:///portal/ 为此,我使用Apache2.2设置了一个反向代理。根据协议,我希望反向代理能够透明地传递所有请求。我的浏览器永远不会知道Tomcat URL 以下是我的配置: ProxyPreserveHost On 没有虚拟主机,我将这些行添加到httpd.conf <Location /portal/> AllowOverride

我在Tomcat中运行了一个web应用程序,位于http://:8080/app/portal/。 我希望全世界都能通过URL
http:///portal/

为此,我使用Apache2.2设置了一个反向代理。根据协议,我希望反向代理能够透明地传递所有请求。我的浏览器永远不会知道Tomcat URL

以下是我的配置:

ProxyPreserveHost On
没有虚拟主机,我将这些行添加到httpd.conf

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

允许超越所有
重新启动发动机
ProxyPasshttp://server:8080/app/portal/
ProxyPassReversehttp://server:8080/app/portal/
当我使用Firefox打开
http:///portal/
,我临时移动了302,所有后续电话都从我的浏览器直接转到http://:8080/app/portal/。我的浏览器指向此URL


这不是我所期望的反向代理。我是配置错误还是误解了反向代理的用途?我应该怎么做才能获得我想要的行为?

您是否尝试过使用mod_rewrite Proxy选项而不是ProxyPass?比如:

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

我试图对davidethell的答案进行评论,但无法正确格式化这些行,因此我发现:

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

RewriteEngine On
RewriteRule   ^/portal/$ /portal/portal
RewriteRule   ^/portal(.+) http://<server>:8080/app$1 [P]
重新编写引擎打开
重写规则^/portal/$/portal/portal
重写规则^/portal(+)http://:8080/app$1[P]

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

ProxyPreserveHost On

您可以通过Url重写实现相同的行为,但文档中不建议这样做。

此处的
RewriteEngine是什么?好问题。我从另一个工作配置中复制了它,我们实际上已经重写了它。我移除了它,它的行为也一样。谢谢你的提示。这不是那么简单,而是正确的方向。请参阅下面我的答案了解详细信息。您已经解决了!我已经有一段时间没有使用Tomcat和Apache进行类似的反向代理了。从长远来看,我发现apache连接器要可靠得多。这似乎可以用于重写URL,但我遇到了403禁止的问题。