Я пытаюсь настроить сбалансированный кластер с помощью mod_proxy_balancer.
Я последовал примеру строки из Вот установить cookie. Мне пришлось настроить его, поскольку среда нестабильна, поэтому не каждый запрос будет возвращать код 200.
Header always add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e;
<Proxy balancer://cluster>
BalancerMember http://server1.example.com route=share2
BalancerMember http://server2 example.com route=share1
</Proxy>
ProxyPass /balancer balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse /balancer balancer://cluster/
(Я знаю stickysession! = ROUTEID, но это по причинам, выходящим за рамки этого вопроса)
Итак, на моем локальном компьютере разработчика я получаю
Set-Cookie ROUTEID=.share1;
как один из заголовков ответа, чего я и ожидал.
Однако в тестовой среде я получаю
Set-Cookie: ROUTEID=.(null);
Я не знаю, как это может быть (null) и что я могу сделать, чтобы он не был нулевым. Может ли нижестоящий сервер что-то сделать, чтобы остановить установку ROUTEID? Или есть какой-то другой вариант конфигурации, который может его блокировать?
В данном конкретном случае это было то, что маршрут был установлен, но ответ от прокси-сервера не получился. Если он получил ошибку HTTP, он дал бы ответ, но если соединение было прервано, он дал бы ноль.
Я подозреваю, что вы обращаетесь к URL за пределами /balancer
сначала и получение из него нежелательного cookie (поскольку переменная среды действительно будет иметь значение null, если для запроса не используется балансировщик нагрузки).
Попробуйте просто установить cookie в случаях, когда используется балансировщик:
<Proxy balancer://cluster>
BalancerMember http://server1.example.com route=share2
BalancerMember http://server2 example.com route=share1
</Proxy>
<Location /balancer/>
Header always add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e;
ProxyPass balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse balancer://cluster/
<Location>