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 задается почти тот же вопрос, поэтому объедините их.
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