Гайды

Балансировка нагрузки: HAProxy vs Nginx

L4 и L7, health checks и reload, метрики, sticky sessions и когда выбирать какой прокси.

~9 мин чтения

Балансировка нагрузки: HAProxy vs Nginx

HAProxy и Nginx (Open Source) — мощные L4/L7 балансировщики и reverse proxy. Выбор зависит от протоколов, эксплуатации и команды. TLS и HTTP версии — Основы HTTP/2 и HTTP/3; деплой приложения за прокси — Деплой FastAPI с Docker и Nginx.


1. Краткая матрица

КритерийHAProxyNginx
L4 TCPОчень сильная традицияstream {} модуль
L7 HTTPACL гибкиеrewrite/location привычны многим
Конфиг hot reloadДаnginx -s reload
Метрики PrometheusЭкспортер / встроенные statsstub_status + exporter
Как единый ingressМеньше в k8s, чаще metal LB слойЧасто ingress-nginx

2. Когда чаще HAProxy

Высокие требования к TCP (DB proxy с осторожностью, MQTT), предсказуемая производительность, детальные health checks из коробки.


3. Когда чаще Nginx

Уже используется как статика + TLS + reverse proxy для приложений; команда знает location и cache.


4. Общие темы

  • Sticky sessions (cookie/ip) — осторожно с stateful.
  • Active health checks vs passive; slow start после recovery.
  • Rate limiting и WAF — у Nginx Plus/модулей или отдельный слой (Cloudflare).

HAProxy дополнительно умеет stick-tables (in-memory) для счётчиков по IP/ключу и детекта аномалий; в связке с ACL это даёт гибкий rate limit и антибот без отдельного WAF для простых сценариев.


5. Health checks и пассивные метрики

HAProxy: option httpchk, интервалы и порог rise/fall. Nginx Plus или custom check в upstream для open-source ограниченнее — часто внешний health sidecar. Снимайте 5xx rate и latency по upstream, а не только «порт открыт».


6. TLS termination

Оба поддерживают TLS на edge; SNI для множества сертификатов. Session tickets и OCSP stapling — см. SSL/TLS. При mTLS к upstream храните CA и ротацию клиентских сертификатов.


7. Чек-лист

  • Проксирование real IP (X-Forwarded-For) и доверенные сети.
  • Таймауты согласованы с upstream (долгие WebSocket — см. WebSockets на FastAPI).
  • Два экземпляра + VRRP (Keepalived) или облачный LB для отказоустойчивости самого балансировщика.
  • Лимит соединений и очередь на перегрузку, а не бесконечный accept.
  • Конфигурация в Git и syntax check перед reload (nginx -t, haproxy -c).

Дальше: SSL/TLS