proxy_next_upstream
Директива `proxy_next_upstream` определяет, должен ли запрос быть передан следующему upstream-серверу при сбое. — NGINX HTTP Core
Описание
Директива `proxy_next_upstream` в NGINX имеет решающее значение для управления сбоями и обеспечения высокой доступности при использовании proxy-модуля. Она задаёт условия, при которых текущий проксированный запрос будет повторно отправлен на следующий сервер в группе upstream. Это особенно полезно для балансировки нагрузки и отказоустойчивости в микросервисной архитектуре, где единая точка отказа может быть смягчена перенаправлением трафика на другой сервер. Эта директива принимает один или несколько аргументов, которые указывают условия ошибок, при которых запрос будет передан следующему upstream-серверу. К распространённым параметрам относятся 'error', 'timeout', 'invalid_header' и 'failed' и др. Комбинируя разные параметры, администраторы могут тонко настраивать условия повторной попытки запроса, улучшая пользовательский опыт за счёт снижения вероятности отказа запроса из‑за кратковременных проблем на одном upstream-сервере. Если upstream-сервер выходит из строя по одной из указанных причин, NGINX попытается связаться со следующим сервером в настроенном блоке upstream. Это помогает предотвратить простои и обеспечивает прозрачное переключение при отказе. Данная возможность важна для поддержания непрерывности сервиса, так как клиенты остаются неосведомлёнными о внутренних сбоях серверов, предполагая, что система надёжнее, чем есть на самом деле. Тем не менее важно настроить адекватный мониторинг и систему оповещений для выявления проблем по мере их появления, несмотря на автоматические повторы, включённые этой директивой.
Пример конфига
upstream myapp {
server backend1.example.com;
server backend2.example.com;
}
location / {
proxy_pass http://myapp;
proxy_next_upstream error timeout invalid_header;
}Чрезмерное использование этой директивы может привести к увеличению задержки, поскольку NGINX ожидает повторных попыток перед ответом клиентам.
Убедитесь, что upstream-серверы совместимы, поскольку повторные попытки особенно могут привести к непредвиденному поведению, если используются разные версии или конфигурации.