Гайды
Балансировка нагрузки: 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. Краткая матрица
| Критерий | HAProxy | Nginx |
|---|---|---|
| L4 TCP | Очень сильная традиция | stream {} модуль |
| L7 HTTP | ACL гибкие | rewrite/location привычны многим |
| Конфиг hot reload | Да | nginx -s reload |
| Метрики Prometheus | Экспортер / встроенные stats | stub_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