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 没有任何意义.
我安装了 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 没有任何意义.