用于多个域负载平衡的粘性会话

时间:2011-02-07 09:57:06

标签: apache mod-rewrite load-balancing

所以这是场景,我有几个负载均衡的服务器,有一堆域指向负载均衡器IP。该网站根据访问的域显示不同的皮肤(这很好)。为了确保我使用粘性会话的负载均衡会话,问题来自我所知道的(这不是很多)我需要为cookie定义域,但我们有多个可能的域..我在每个域上定义cookie如下网络服务器:

RewriteEngine On
RewriteRule .* - [CO=BALANCEID:balancer.lb1:.domain1.com]

因为我们有多个域,我想我可以为每个域添加一个重写规则,而apache会处理它,如下所示:

RewriteEngine On
RewriteRule .* - [CO=BALANCEID:balancer.lb1:.domain1.com]
RewriteRule .* - [CO=BALANCEID:balancer.lb1:.domain2.com]
RewriteRule .* - [CO=BALANCEID:balancer.lb1:.domain3.com]
RewriteRule .* - [CO=BALANCEID:balancer.lb1:.domain4.com]

但是你可能已经想到了,粘性会话只适用于domain1.com,这是列表中的第一个。

知道如何解决这个问题吗?

编辑:

我现在正在尝试这种方法:

RewriteEngine On
RewriteCond %{HTTP_X_FORWARDED_HOST} ^(www\.)?domain1\.com/ [NC]
RewriteRule .* - [CO=BALANCEID:balancer.lb2:.domain1.com] [L]
RewriteCond %{HTTP_X_FORWARDED_HOST} ^(www\.)?domain2\.com/ [NC]
RewriteRule .* - [CO=BALANCEID:balancer.lb2:.domain2.com] [L]
RewriteCond %{HTTP_X_FORWARDED_HOST} ^(www\.)?domain3\.com/ [NC]
RewriteRule .* - [CO=BALANCEID:balancer.lb2:.domain3.com] [L]

但它根本不起作用,是那些错误编写的规则或 那个逻辑根本不起作用?

PS:我也试过HTTP_HOST而不是HTTP_X_FORWARDED_HOST,但结果相同。

1 个答案:

答案 0 :(得分:1)

所以我设法让它工作......第二种方法很好,只有env var不好而且我也删除了尾随斜杠:

RewriteCond %{HTTP:X-Forwarded-Host} ^(www\.)?domain1\.com [NC]
RewriteRule .* - [CO=BALANCEID:balancer.lb1:.domain1.com] [L]
RewriteCond %{HTTP:X-Forwarded-Host} ^(www\.)?domain2\.com [NC]
RewriteRule .* - [CO=BALANCEID:balancer.lb1:.domain2.com] [L]

请注意,如果您想通过PHP访问该域,请执行以下操作:

$_SERVER['HTTP_X_FORWARDED_HOST']

也许这会节省一些时间给其他人;)

感谢回复!