Apache 按源 IP 进行平衡

Apache 按源 IP 进行平衡

我正在使用 Apache 的代理平衡器将一个子域(例如 subdomain.domain.com)平衡到位于 2 台服务器上的应用程序。以下是我的 Apache 配置文件的摘录:

<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 提出的请求

答案1

不会。代理平衡器模块将仅根据两个因素将请求传递给成员:

  1. 如果请求中有一个指定成员的粘性 cookie,则请求将被转发给该成员(如果可用)。看起来你不要但已进行了此配置。
  2. 否则请求将根据分发算法转发。有三种可配置算法,分别是简单循环、最少流量(字节)和最少请求(均有权重可用)。

您可以通过 cookie 启用粘性会话。具体如何操作可能取决于您的后端,除非您希望 Apache 不管后端在做什么都添加另一个 cookie。

附注: HAProxy乌贼, 和Nginx都非常适合负载平衡和缓存。Apache 的代理模块通常足以应付轻负载和中等负载,听起来你已经很熟悉它了。Apache 的缺点是它就像一把瑞士军刀:做所有事情都还算不错,但做任何事都不是特别好,而且有点笨重。使用地址冗余系统,如鲤鱼将允许 Linux 或 BSD 盒也成为高可用性代理平衡器。

答案2

您可以尝试以下配置:

<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

相关内容