我使用mod_proxy进行apache 2.4设置以加载平衡2个tomcats。 这是httpd.conf
的补充ProxyRequests Off
ProxyPass /APP balancer://mycluster stickysession=JSESSIONID|jsessionid
ProxyPassReverse /APP balancer://mycluster
<Proxy balancer://mycluster>
BalancerMember http://TOMCAT1:8080/APP route=TOMCAT1
BalancerMember http://TOMCAT2:8080/APP route=TOMCAT2
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
Require all granted
</Location>
ProxyPass /balancer-manager !
<Location /server-status>
SetHandler server-status
Require host localhost
Require all granted
</Location>
如果我尝试“http://localhost:7000/APP”,则从浏览器中找不到它。但是,如果我使用“http://localhost:7000/APP/”应用程序出现。
请注意附加的“/”和网址的结尾。如何补充/避免这种情况?
更新 工作结构:
ProxyRequests Off
ProxyPass /APP balancer://mycluster/APP stickysession=JSESSIONID|jsessionid
ProxyPassReverse /APP balancer://mycluster/APP
<Proxy balancer://mycluster>
BalancerMember http://TOMCAT1:8080 route=TOMCAT1
BalancerMember http://TOMCAT2:8080 route=TOMCAT2
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
Require all granted
</Location>
ProxyPass /balancer-manager !
<Location /server-status>
SetHandler server-status
Require all granted
</Location>
答案 0 :(得分:0)
您的平衡器定义错误。在平衡器定义中,您只需定义节点,而不是它们处理的uri。
**Incorrect:**
BalancerMember http://TOMCAT1:8080/APP
***Correct:***
BalancerMember http://TOMCAT1:8080
然后你在ProxyPass中处理uri-path
ProxyPass /app/ balancer://mycluster/app/
您也可以使用:
ProxyPass /app balancer://mycluster/app
注意: balancer:// mycluster与balancer:// mycluster /相同。并且有一条规则应该遵循以避免问题,即如果源有一个尾部斜杠目标,也应该有一个尾部斜杠,这样就可以避免后端响应中的路径不匹配。
注意2:你的<Location /server-status>
有两个Require语句,因为默认值是Require any,所有都将被允许,因为你有一个Require all grant,所以在那个上下文中定义一个Require hosts localhost是没有意义的。 / p>