Определение простыми словами
HAProxy (High Availability Proxy) — балансировщик нагрузки уровней L4 (TCP) и L7 (HTTP). Принимает входящие соединения на frontend, выбирает живой сервер из backend по алгоритму и пересылает запрос. Известен низким потреблением памяти и стабильной задержкой даже под десятками тысяч соединений в секунду.
Конфиг разбит на секции global (общие настройки), defaults (дефолты для всех), frontend (что слушаем), backend (куда отправляем) и listen (объединение frontend+backend). Поддерживает health-checks, sticky sessions через cookie или source-IP, SSL-терминацию, ACL для маршрутизации по заголовкам и URL.
Сравнение с альтернативами
| Решение | L4 | L7 | Сильная сторона |
|---|---|---|---|
| HAProxy | Да | Да | Скорость, точные health-checks |
| Nginx | Stream | Да | Веб-сервер + прокси в одном |
| Traefik | Нет | Да | Автодискавери в Docker/K8s |
| Envoy | Да | Да | gRPC, observability, sidecar |
Кейсы использования
- Балансировка запросов к нескольким PHP-FPM или Node.js-бэкендам для веб-приложения с растущей нагрузкой.
- SSL-терминация перед фермой бэкендов, бэкенды получают чистый HTTP и не тратят CPU на TLS.
- TCP-балансировка для PostgreSQL-кластера с pgBouncer или RabbitMQ.
- Blue/green деплой: ACL переключает трафик между двумя backend-секциями по заголовку или весу.
- Негативный сценарий: HAProxy не отдаёт статику и не делает rewrite URL так гибко, как nginx. Если нужен полноценный веб-сервер — берите nginx или ставьте оба в связке.
Технические детали
Базовый конфиг для балансировки HTTP на два бэкенда с health-check:
apt install haproxy
cat > /etc/haproxy/haproxy.cfg <<'EOF'
global
maxconn 50000
log /dev/log local0
defaults
mode http
timeout connect 5s
timeout client 30s
timeout server 30s
frontend web_in
bind *:80
default_backend app_servers
backend app_servers
balance leastconn
option httpchk GET /health
server app1 10.0.0.11:8080 check
server app2 10.0.0.12:8080 check
EOF
haproxy -c -f /etc/haproxy/haproxy.cfg
systemctl restart haproxy
Статистика доступна через stats socket или встроенную страницу. Связку с iptables используют для защиты от SYN-флуда на 80/443.
🔥 Где это применяется
Частые вопросы
HAProxy или nginx — что выбрать для балансировки?
Если нужна только балансировка и L4 — HAProxy быстрее и точнее в health-checks. Если рядом крутится веб-сервер со статикой и rewrite — nginx закрывает оба сценария.
Поддерживает ли HAProxy HTTP/2 и HTTP/3?
HTTP/2 — да, начиная с версии 1.8. HTTP/3 (QUIC) появился экспериментально в 2.6 и стабилизирован в 2.9.
Как сделать sticky session?
Через cookie SRV insert или balance source. Первый вариант надёжнее: HAProxy сам выдаст клиенту cookie с именем сервера и будет возвращать его туда же.