Балансировщик нагрузки Apache с файлами cookie, измените ROUTEID / закрепленный файл cookie в PHP - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть 2 сервера, с которыми я балансирую трафик с помощью Apache Load Balancer.Это служит двум целям: балансировке нагрузки и обратному прокси, чтобы у всех хостов был один и тот же URL.Эта установка отлично работает, используя куки для липкости.

В некоторых случаях мне может понадобиться «заставить» балансировщик использовать определенный хост (BalanceMember).Это абсолютное требование, и причина выходит за рамки этого обсуждения.

Я использую PHP, просто меняя файл cookie ROUTEID, например, с 1 на 2.Мой первый вопрос: почему я должен уничтожать сеанс PHP после того, как я изменил значение COOKIE, чтобы оно вступило в силу.ROUTEID не изменится, если я не уничтожу сессию после ее изменения.

Мой второй вопрос: это лучший способ достичь этой цели, учитывая, что она работает так, как нужно.

Apache proxy.conf

<VirtualHost *:80>
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; Expires=-1 path=/" env=BALANCER_ROUTE_CHANGED

<Proxy "balancer://mycluster">
    BalancerMember http://myhost1.example.com/ route=1
    BalancerMember http://myhost2.example.com/ route=2

    ProxySet lbmethod=byrequests failontimeout=on
</Proxy>

ProxyPreserveHost Off

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.0/8

# Enable SSL Proxying
ProxyRequests Off
SSLProxyEngine on

ProxyPass / balancer://mycluster/ stickysession=ROUTEID
ProxyPassReverse / balancer://mycluster/

</VirtualHost>

PHP-код для изменения ROUTEID

session_name("my_example_session");
session_start();


ob_start();
$cookie_name = "ROUTEID";
$cookie_value = "balancer.2";
setrawcookie($cookie_name, $cookie_value, time() + (86400 * 30)); // 86400 = 1 day
ob_flush();

session_destroy();
session_write_close();

1 Ответ

0 голосов
/ 29 декабря 2018

Хорошо, я понял это.Оказывается, вам не нужно уничтожать сессию PHP.Позвольте мне рассказать вам о своих предпочтениях при работе с файлами cookie.

  1. Отладка файлов cookie в вашем браузере. Я использую firebug в Firefox.Это даст вам хорошее понимание того, как и где хранятся файлы cookie.(Не делая этого, мы замедлили изучение того, как работают куки)

  2. Куки используют пути, так что вы можете иметь одинаковое имя куки в "/" и "/ my / path", и они могутимеют два разных значения.Вот что вызвало у меня головную боль: - Я установил исходный файл cookie в «/» и изменил его в «/my/path".

Apache Config

Заменить

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; Expires=-1 path=/" env=BALANCER_ROUTE_CHANGED

На

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

PHP

$cookie_name = "ROUTEID";
$cookie_value = "balancer.2";
setrawcookie($cookie_name, $cookie_value, 0, "/");
...