Apache 负载平衡 proxy_balancer
Apache load balancing with proxy_balancer
我在配置 apache 2.4 以使用它时遇到困难 proxy_balancer mod。我的用例相当简单。请求正在到达 apache 节点,该节点应该对集群进行负载平衡。这是我的 config
:
<VirtualHost *:80>
ProxyRequests off
ServerName localhost
<Proxy balancer://geocode>
BalancerMember "http://192.168.2.11:8080/ors/status"
BalancerMember "http://192.168.2.35:8080/ors/status"
Require all granted
ProxySet lbmethod=byrequests
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
Require all granted
</Location>
ProxyPass /balancer-manager !
ProxyPass "/geocodelb" "balancer://geocode"
ProxyPass "/geocode" "http://192.168.2.35:8080/ors/status"
</VirtualHost>
导航到 localhost:80/geocodelb
时,我收到 404 Not Found
:
129.206.205.50 - - [01/Oct/2017:19:39:55 +0000] "GET /geocodelb
HTTP/1.1" 404 164 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12;
rv:56.0) Gecko/20100101 Firefox/56.0"
但 localhost:80/geocode
有效:
129.206.205.50 - - [01/Oct/2017:19:40:07 +0000] "GET /geocode HTTP/1.1"
200 757 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:56.0)
Gecko/20100101 Firefox/56.0"
(../status
指向一个 tomcat 实例和 returns 一个 json 对象)
如果我将 BalancerMembers 的 url 替换为任意值 - 例如 google.com
- 它会起作用。
我也可以联系 localhost:80/balancer-manager
的平衡器管理器并获取正确的信息。如果我没记错的话,它告诉我一切看起来都很好(见截图)。我在这里错过了什么?
这不起作用的原因是平衡器成员必须 url 到服务器,没有路径。该路径将添加到 ProxyPass 指令中,例如 balancer://orsbackend/ors/geocode
。这里的工作配置:
<VirtualHost *:80>
ProxyRequests off
ServerName localhost
<Proxy balancer://orsbackend>
BalancerMember "http://192.168.2.11:8080"
BalancerMember "http://192.168.2.35:8080"
ProxySet lbmethod=byrequests
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
Require all granted
</Location>
ProxyPass /balancer-manager !
ProxyPass "/geocode" "balancer://orsbackend/ors/geocode"
</VirtualHost>
我在配置 apache 2.4 以使用它时遇到困难 proxy_balancer mod。我的用例相当简单。请求正在到达 apache 节点,该节点应该对集群进行负载平衡。这是我的 config
:
<VirtualHost *:80>
ProxyRequests off
ServerName localhost
<Proxy balancer://geocode>
BalancerMember "http://192.168.2.11:8080/ors/status"
BalancerMember "http://192.168.2.35:8080/ors/status"
Require all granted
ProxySet lbmethod=byrequests
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
Require all granted
</Location>
ProxyPass /balancer-manager !
ProxyPass "/geocodelb" "balancer://geocode"
ProxyPass "/geocode" "http://192.168.2.35:8080/ors/status"
</VirtualHost>
导航到 localhost:80/geocodelb
时,我收到 404 Not Found
:
129.206.205.50 - - [01/Oct/2017:19:39:55 +0000] "GET /geocodelb
HTTP/1.1" 404 164 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12;
rv:56.0) Gecko/20100101 Firefox/56.0"
但 localhost:80/geocode
有效:
129.206.205.50 - - [01/Oct/2017:19:40:07 +0000] "GET /geocode HTTP/1.1"
200 757 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:56.0)
Gecko/20100101 Firefox/56.0"
(../status
指向一个 tomcat 实例和 returns 一个 json 对象)
如果我将 BalancerMembers 的 url 替换为任意值 - 例如 google.com
- 它会起作用。
我也可以联系 localhost:80/balancer-manager
的平衡器管理器并获取正确的信息。如果我没记错的话,它告诉我一切看起来都很好(见截图)。我在这里错过了什么?
这不起作用的原因是平衡器成员必须 url 到服务器,没有路径。该路径将添加到 ProxyPass 指令中,例如 balancer://orsbackend/ors/geocode
。这里的工作配置:
<VirtualHost *:80>
ProxyRequests off
ServerName localhost
<Proxy balancer://orsbackend>
BalancerMember "http://192.168.2.11:8080"
BalancerMember "http://192.168.2.35:8080"
ProxySet lbmethod=byrequests
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
Require all granted
</Location>
ProxyPass /balancer-manager !
ProxyPass "/geocode" "balancer://orsbackend/ors/geocode"
</VirtualHost>