Липкий сеанс для балансировки нагрузки с несколькими доменами - PullRequest
0 голосов
/ 07 февраля 2011

так вот сценарий, у меня есть несколько серверов с балансировкой нагрузки, с кучей доменов, указывающих на 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 Ответ

1 голос
/ 09 февраля 2011

Так что мне удалось заставить его работать ... второй подход был хорош, только 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']

Может быть, это сэкономит время кому-то еще;)

спасибо за ответы!

...