Wiki
Web / стек

HAProxy — что это простыми словами

HAProxy — TCP/HTTP-балансировщик и reverse-proxy. Промышленный стандарт для распределения трафика между backend-серверами. Быстрее и функциональнее nginx для балансировки.

HAProxy (High Availability Proxy) — open-source L4 (TCP) и L7 (HTTP) балансировщик, написан на C с фокусом на минимальную латентность и максимальную пропускную способность. Держит сотни тысяч concurrent-connection на одной машине, задержка added-latency < 1 мс.

Классические use-case: (1) балансировка веб-app'а — 3 инстанса backend на разных VPS, HAProxy распределяет round-robin / least-conn / IP-hash. (2) failover БД — Postgres primary/replica, HAProxy направляет `write` на primary, `read` на реплики. (3) TLS-terminator — принимает HTTPS от клиента, ходит по HTTP к backend'у (быстрее в 3-5 раз). (4) rate-limiting / DDoS-фильтр — stick-table + tcp-request content для anti-bot.

Config-файл `/etc/haproxy/haproxy.cfg`: секции `global` (worker count, chroot), `defaults` (timeout, mode), `frontend` (listen порт + ACL), `backend` (список серверов + healthchecks), `listen` (frontend + backend в одной секции для простых случаев).

Мониторинг: HAProxy Stats page (`stats enable` в конфиге) — HTML-страница с real-time статусом backend'ов, RPS, latency, connection count, sessions. Prometheus-exporter встроен с v2.0.

vs nginx: nginx проще для базового reverse-proxy + static-serving. HAProxy сильнее для чистой балансировки: больше алгоритмов, глубже мониторинг, точнее healthchecks. Часто ставят рядом: HAProxy → nginx → app, где HAProxy распределяет между несколькими nginx-нодами.

Частые вопросы

HAProxy или nginx для балансировки?
Нужна только round-robin между 2-3 инстансами — nginx хватит. Sophisticated healthchecks / stick-tables / TCP-mode — HAProxy.
HAProxy умеет HTTP/3?
С версии 2.7 (2022) — да, экспериментально. С 3.0 (2024) — стабильно.