У меня есть угловой случай, когда некоторые серверы приложений, стоящие за HaProxy, возвращают 500 кодов для некоторых запросов, если они используют старую версию кода. Обычно это происходит только тогда, когда в кластере выполняется обновление, но может произойти и при частичном сбое развертывания. Весьма вероятно, что другой сервер приложений в том же пуле сможет обработать запрос.
Интересно, может ли HAProxy обнаружить, что внутренний сервер ответил с ошибкой 500 для определенного запроса (без использования проверки работоспособности), и повторить попытку на другом сервере. Вроде как Option redispatch
для ошибок вместо таймаутов http.
Кажется, что http-запросы будут идти только в клиентский браузер, а не обратно в Haproxy, но я подумал, что спрошу и посмотрю, решил ли кто-нибудь это, возможно, даже с помощью WAF или двустороннего прокси.
Да на HAProxy версии> 2.0: добавить retry-on all-retryable-errors
на соответствующий сервер.
Но будьте осторожны (запросы POST могут повторяться, вызывая дублирование операций с базой данных); видеть https://www.haproxy.com/blog/haproxy-layer-7-retries-and-chaos-engineering/