我有使用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是没有意义的。

10-07 19:42
查看更多