Apache httpd работники повторить попытку

У меня есть веб-сервер Apache httpd, на котором запущены mod_proxy и mod_proxy_balancer. Весь /somedir отправляется на 2 рабочих компьютера, которые обслуживают запросы с помощью циклического планировщика. На каждой рабочей машине работает IIS, но я не думаю, что это важно.

Я могу продемонстрировать работу балансировщика нагрузки, многократно запрашивая одну страницу, которая содержит IP-адрес компьютера, и вижу, что он переключается с одного на другой предсказуемым образом.

Если я выключу один из серверов IIS и начну запрашивать ту же страницу, то на каждой странице будет только IP-адрес работающей машины. Однако, если я запускаю IIS и не запускаю свое приложение IIS, то /somedir возвращает 500 (как и должно быть).

Я добавил 500 в failonstatus (Apache 2.4), поэтому при появлении ошибки Apache переводит рабочий компьютер в состояние ошибки. Apache все еще возвращает ошибку прокси клиенту. Как я могу заставить Apache перехватить прокси-сервер и повторить попытку, используя другого работника так же, как при сбое соединения.

Обновить

В StackOverflow задается почти тот же вопрос, поэтому объедините их.

https://stackoverflow.com/questions/11083707/httpd-mod-proxy-balancer-failover-failonstatus-transperant-switching

2 ответа

Я говорил с разработчиком в списке рассылки httpd, и он подтвердил, что эта функция не была реализована в текущей кодовой базе. Я также пересмотрел код сам. Конечный автомат внутри mod_proxy_balancer не может повторить попытку HTTP-ошибки, но может сделать это только в случае ошибки подключения. Я попытался реализовать это сам, но это слишком сложно, и я могу легко сделать кодовую базу нестабильной.

Таким образом, эта проблема не имеет известного решения сегодня...

На всякий случай, если кто-то снова дойдет до этого вопроса: failonstatus Директива была реализована начиная с Apache 2.2.27.

<Proxy balancer://backends>
BalancerMember http://10.1.1.11
BalancerMember http://10.1.1.12
ProxySet failonstatus=500
</Proxy>

Журнал:

[Thu Apr 28 03:13:06.176916 2016] [proxy_balancer:error] [pid 3285:tid 140231873353472] [client 10.1.1.1:43608] AH01174: balancer://puppetmaster: Forcing worker (http://10.1.1.12) into error state due to status code 500 matching 'failonstatus' balancer parameter
Другие вопросы по тегам