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

时间:2017-08-25 20:04:23

标签: tomcat load-balancing httpd.conf apache2.4

我使用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>

1 个答案:

答案 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>

相关问题