我有使用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/”,则会显示该应用程序。
注意附加的“ /”和URL的末尾。如何避免/避免这种额外情况?
更新资料
工作结构:
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>
最佳答案
您的平衡器定义错误。在平衡器定义中,您只需要定义节点,而不是它们处理的uri。
**Incorrect:**
BalancerMember http://TOMCAT1:8080/APP
***Correct:***
BalancerMember http://TOMCAT1:8080
然后在ProxyPass中处理uri-paths
ProxyPass /app/ balancer://mycluster/app/
您还可以使用:
ProxyPass /app balancer://mycluster/app
注意:balancer:// mycluster与balancer:// mycluster /相同。而且有一条规则应避免出现以下问题:如果源具有尾部斜杠目标也应具有尾部斜杠,这样可以避免后端响应中的路径不匹配。
注意2:您的
<Location /server-status>
有两个Require语句,因为默认值为Require any,所以将全部允许,因为您已授予Require All,因此在该上下文中定义Require主机localhost是没有意义的。