У меня есть 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();