Apache2 使用Apache ProxyPass的反向代理重定向,而不是透明地通过
我在Tomcat中运行了一个web应用程序,位于http://:8080/app/portal/。 我希望全世界都能通过URLApache2 使用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
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禁止的问题。