【发布时间】:2011-02-07 09:57:06
【问题描述】:
所以这是场景,我有几个负载平衡服务器,有一堆指向负载平衡器 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,但结果相同。
【问题讨论】:
-
你真的需要粘性会话,为什么不在服务器端(数据库/NFS等)共享会话?
-
好吧,我尝试将两台服务器上 php.ini 的 session.save_path 设置为 NAS 上的某个共享位置,但会话不一致,重新加载页面有时会显示用户已登录并且有时没有记录.. 除了 php.ini 中的设置,还应该做什么?
标签: apache mod-rewrite load-balancing