Балансировка нагрузки

Тема дорожной карты · Nginx

Балансировка нагрузки с Nginx распределяет входящий трафик HTTP, HTTPS, TCP и UDP между пулом бэкенд-серверов, определённых в блоке upstream, улучшая доступность, масштабируемость и отказоустойчивость веб-приложений. Nginx поддерживает несколько алгоритмов балансировки нагрузки из коробки: round-robin (по умолчанию), least_conn для маршрутизации с учётом числа соединений, ip_hash для постоянства сессий и random с опциональным выбором двух наименее загруженных, — все настраиваются в блоке upstream вместе с параметрами weight, max_fails и backup для отдельных серверов. Базовая конфигурация балансировки HTTP-нагрузки использует proxy_pass http://backend; в блоке location /, указывающем на именованный upstream, тогда как балансировка TCP и UDP выполняется через модуль stream с аналогичными директивами proxy_pass. Балансировка нагрузки Nginx тесно интегрируется с SSL/TLS-терминацией: веб-сервер принимает зашифрованные HTTPS-соединения от клиентов и передаёт чистый HTTP внутренним бэкендам, вынося управление сертификатами в единую точку. Сочетание балансировки нагрузки Nginx с проверками работоспособности, keepalive-соединениями к upstream и ограничением скорости создаёт надёжный высокопроизводительный ingress-слой для микросервисов и монолитных приложений.

Как это работает

Балансировка нагрузки распределяет трафик между upstream-backend. Методы: round-robin (дефолт), least_conn (наименьшее число активных соединений), ip_hash (sticky session по client IP), hash $request_uri consistent (consistent hashing для кешей). Помечайте backend как backup (backup) или down (down). Health checks: пассивный (помечает down после N сбоев через max_fails + fail_timeout); активный health check требует nginx-plus или third-party модулей.

Когда применять

least_conn лучше round-robin, когда время запросов варьируется (одни быстрые, другие медленные). ip_hash — только если backend реально нуждается в sticky session (stateless приложения нет). max_fails 3 fail_timeout 30s — для пометки нездоровых backend. Комбинируйте с health-эндпойнтом backend + реальным health check-тулом (Consul, k8s probes); пассивный health check грубый.

Типичные ошибки

Ловушки Балансировка нагрузки: ip_hash + клиенты за корпоративным NAT (все на один backend); нет таймаутов — зависший backend никогда не помечен down; round-robin на backend разной capacity (перегружают меньший); вообще нет health check (сбойный backend получает трафик до ручного вмешательства).

Связанные понятия

Полезные ресурсы