2011-02-07 34 views
0

所以这里是场景,我有几个负载平衡服务器,有一堆域指向负载平衡器IP。该网站根据所访问的域名显示不同的皮肤(此工作正常)。为了保证会话的负载平衡,我使用了粘性会话,问题来自我所知道的(这不是很多),我需要为cookie定义域,但我们有多个可能的域..我定义了每个cookie Web服务器:粘滞会话负载平衡多个域

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,但它有相同的结果。

+0

你真的需要粘性会话,为什么不在服务器端共享会话(数据库/ NFS等)? – regilero 2011-02-07 12:58:57

+0

以及我试图设置两个服务器上的php.ini的session.save_path到NAS上的一些共享位置,但会话不一致,重新加载页面有时会显示用户已登录,有时没有登录..什么除了php.ini中的设置,还应该完成其他操作吗? – Julien 2011-02-07 22:14:17

回答

1

所以我设法使它工作......第二种方式是好的,只有的环境变量是不好的,我也删除了结尾的斜线:

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] 

注意,如果u想要通过PHP访问该域名的:

$_SERVER['HTTP_X_FORWARDED_HOST'] 

也许这将节省一些时间给别人;)

感谢您的答复!