apache mod_proxy url 不起作用,除非附加 /

apache mod_proxy url does not work unless / is appended

我安装了 apache 2.4 mod_proxy 来平衡 2 个 tomcat。 这是 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" it does not work. However if I use "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 路径

ProxyPass /app/ balancer://mycluster/app/


您还可以使用:

ProxyPass /app balancer://mycluster/app

注意: balancer://mycluster 与 balancer://mycluster/ 相同。并且您应该遵循一条规则来避免出现以下问题:如果源有尾部斜线,目标也应该有尾部斜线,这样可以避免后端响应中的路径不匹配。

注意 2:您的 <Location /server-status> 有两个 Require 语句,因为默认是 Require any,所有都将被允许,因为您已获得 Require all granted,因此在该上下文中定义 Require host localhost 没有任何意义.