upstream
Директива `upstream` определяет группу бэкенд-серверов для балансировки нагрузки. — NGINX HTTP Core
Описание
Директива `upstream` в NGINX создаёт именованный блок, в котором можно определить несколько бэкенд-серверов, обрабатывающих запросы в режиме балансировки нагрузки. В пределах блока `upstream` можно указать данные о нескольких серверах, включая их адреса и необязательные веса. NGINX поддерживает различные методы балансировки нагрузки, такие как round-robin, least connections и IP hash, которые также могут быть настроены в контексте `upstream`. Синтаксис директивы `upstream` позволяет указывать несколько серверов в рамках именованного контекста. Например, можно создать группу `upstream` с именем `backend`, которая включает несколько блоков server, каждый из которых представляет отдельный экземпляр приложения. Каждый сервер можно задать с его IP-адресом и необязательными параметрами, такими как `max_fails` и `fail_timeout`, чтобы управлять поведением NGINX при отказах серверов. Кроме того, вы можете настроить метод балансировки нагрузки в соответствии с потребностями вашего приложения, указав, например, `least_conn`, `ip_hash` и т.д. Директива `upstream` не имеет значений по умолчанию; её необходимо явно определить в конфигурационном файле. После настройки она служит точкой ссылки для других директив, таких как `proxy_pass`, которые могут использовать эту определённую группу для эффективного распределения входящего трафика по указанным бэкенд-серверам.
Пример конфига
upstream backend {
server backend1.example.com;
server backend2.example.com weight=2;
server backend3.example.com max_fails=3 fail_timeout=30s;
}Убедитесь, что блок upstream определён в контексте `http`, поскольку он недопустим в контекстах `server` или `location`.
Будьте осторожны с health checks и логикой failover, так как неправильная конфигурация может привести к отправке трафика на неотзывчивые серверы.
Weighting в upstream blocks влияет на распределение нагрузки; убедитесь, что оно соответствует вашим ожиданиям по управлению нагрузкой.