2017-08-25 17 views
0

我有apache 2.4安装mod_proxy负载均衡2 tomcats。 这里是除了httpd.conf中apache mod_proxy url不工作,除非/被追加

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

你均衡的定义是错误的。在平衡器定义中,您只需定义节点,而不是它们处理的uri。

**Incorrect:** 
BalancerMember http://TOMCAT1:8080/APP 

***Correct:*** 
BalancerMember http://TOMCAT1:8080 

然后你在处理URI的ProxyPass路径

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


您还可以使用:

ProxyPass /app balancer://mycluster/app 

注:平衡器:// myCluster中是一样的平衡器:// myCluster中/。并且有一条规则,您应该遵循以避免说源代码有尾随斜杠目标的问题也应该有尾随斜线,这样可以避免来自后端的响应中的路径不匹配。注意2:您的<Location /server-status>有两个Require语句,因为缺省值是Require any,所有将被允许,因为您的Require全部被授予,因此在该上下文中定义Require host localhost是没有意义的。

+0

这就像一个魅力!谢谢。为了其他人的利益,用适合我的结构更新了问题 – user811433