2011-02-07 61 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'] 

也許這將節省一些時間給別人;)

感謝您的答覆!