HAProxy — что это, балансировка нагрузки, конфиг для VPS | Глоссарий FREEHOSTING

HAProxy

High Availability Proxy
HAProxy — HAProxy — TCP/HTTP-балансировщик нагрузки и обратный прокси на C, известный за низкую задержку и стабильность. Распределяет запросы между бэкендами по алгоритмам roundrobin, leastconn, source.

Определение простыми словами

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 с именем сервера и будет возвращать его туда же.