我正在使用Apache的代理平衡器来平衡一个子域(例如subdomain.domain.com)到位于2个服务器上的应用程序。 这里是我的Apacheconfiguration文件的摘录:
<Proxy *> Order deny,allow Allow from all </Proxy> <Proxy balancer://cluster1> BalancerMember http://server1:28081 route=w1 BalancerMember http://server2:28082 route=w2 </Proxy> ProxyPass /path balancer://cluster1/path ProxyPassReverse /path balancer://cluster1/path
我的问题是,如果可以使用源IP地址来决定哪个BalancerMember用于请求? 例如要求从1.2.3.4到成员1 ?
不可以。代理平衡器模块仅基于以下两个因素将请求传递给成员:
您可以通过cookie启用粘性会话。 你想如何做到这一点可能取决于你的后端,除非你希望Apache添加另一个cookie,而不pipe后端在做什么。
注意事项: HAProxy , Squid和Nginx在负载均衡和caching方面都非常出色。 Apache的代理模块通常对于轻载和中等负载来说已经足够了,而且听起来好像你已经熟悉了。 阿帕奇的缺点是,它就像一把瑞士刀:做的一切都相当好,没有什么特别好,而且有点笨重。 使用像CARP这样的地址冗余系统将允许Linux或BSD机箱也成为高可用代理平衡器。
您可以尝试以下configuration:
<Proxy *> Order deny,allow Allow from all </Proxy> <Proxy balancer://cluster1> BalancerMember http://server1:28081 route=w1 </Proxy> <Proxy balancer://cluster2> BalancerMember http://server2:28082 route=w2 </Proxy> RewriteEngine On # redirect clients from 1.2.3.4 to the first member RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4$ RewriteRule ^/path(.*)$ balancer://cluster1/path$1 [P,L] # This rule will take care of the rest clients ProxyPass /path balancer://cluster2/path ProxyPassReverse /path balancer://cluster2/path