Назад | Перейти на главную страницу

как% {BALANCER_WORKER_ROUTE} e может быть нулевым

Я пытаюсь настроить сбалансированный кластер с помощью 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>