Главная/Разработка/HAProxy

Установка HAProxy для балансировки нагрузки и TCP-прокси

Установка HAProxy на VPS превращает один сервер в балансировщик нагрузки: он принимает соединения и раздаёт их по нескольким серверам, исключая упавшие после проверки. Балансировщик нагрузки, то есть программа, которая распределяет запросы между копиями приложения, нужен, когда одного сервера мало или обновление не должно останавливать сайт.

5 мин чтенияДанные проверены 16 октября 2026

Ответ за 30 секунд

Для одного приложения HAProxy не нужен: хватит Caddy или Nginx. Он окупается, когда копий приложения две и больше или нужен TCP-прокси к базе. Если задача сводится к раздаче HTTP по двум серверам, сначала сравните его с балансировщиком провайдера.

Почасовая оплата: поднимите три сервера на время проверки схемы, смоделируйте отказ узла и удалите стенд.

HAProxy на VPS или балансировщик Таймвеб Клауд

01 · 1 мин

Что делает HAProxy и чем он отличается от Nginx#

HAProxy это программа с открытым кодом, которая только принимает и перенаправляет соединения. Статические файлы он не раздаёт и PHP не запускает, зато умеет то, ради чего его ставят: проверять состояние серверов, исключать упавшие, считать запросы и ограничивать их, показывать статистику.

ЗадачаЧем решать
Один сайт или контейнер, нужен HTTPSCaddy или Nginx
Две и больше копии приложения, проверка состоянияHAProxy или балансировщик провайдера
TCP-трафик: базы, SSH, MQTTHAProxy в режиме tcp
Десятки сервисов, которые часто меняютсяTraefik или кластер Kubernetes

02 · 1 мин

Установка HAProxy на Ubuntu и в Docker#

На Ubuntu и Debian HAProxy ставится пакетом: sudo apt update && sudo apt install haproxy. Конфиг лежит в /etc/haproxy/haproxy.cfg. Версия в пакете дистрибутива обычно ниже текущей LTS-ветки 3.4, которую даёт образ haproxy:lts.

  1. Проверьте файл до применения: haproxy -c -f /etc/haproxy/haproxy.cfg.
  2. Примените без обрыва соединений: sudo systemctl reload haproxy.
  3. Откройте порты, которые слушает frontend, например 80 и 443.

В Docker конфиг монтируют по пути из документации образа, а перечитывают сигналом HUP:

services:
  haproxy:
    image: haproxy:lts
    restart: unless-stopped
    ports: ["80:80", "443:443"]
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro

# применить правки:
# docker compose kill -s HUP haproxy

Ловушка Docker: имена сервисов в строках server должны разрешаться при запуске. Если приложение ещё не поднялось, HAProxy не стартует с ошибкой про неизвестный адрес.

03 · 1 мин

Рабочий haproxy.cfg: балансировка двух копий приложения#

global
    log /dev/log local0
    maxconn 2000

defaults
    mode http
    log global
    option httplog
    option forwardfor
    timeout connect 5s
    timeout client 30s
    timeout server 30s

frontend web
    bind :80
    default_backend app

backend app
    balance roundrobin
    option httpchk GET /health
    server app1 10.0.0.11:8080 check
    server app2 10.0.0.12:8080 check

listen stats
    bind 127.0.0.1:8404
    stats enable
    stats uri /stats

Что здесь важно. Слово check включает проверку состояния: при ответе 2xx или 3xx на /health сервер остаётся в пуле, иначе исключается. Алгоритм roundrobin раздаёт запросы по кругу, а leastconn лучше для долгих соединений. Строка option forwardfor добавляет заголовок X-Forwarded-For с адресом посетителя.

Страница статистики привязана к 127.0.0.1: смотрите её через туннель ssh -L 8404:127.0.0.1:8404 root@IP-сервера и открывайте в браузере http://127.0.0.1:8404/stats. Открытая в интернет, она выдаёт устройство вашей сети.

04 · 1 мин

TCP-прокси на HAProxy: PostgreSQL, Redis, SSH#

Режим tcp не разбирает содержимое, он передаёт байты и проверяет доступность порта. Отдельный файл для базы выглядит так:

defaults
    mode tcp
    option tcplog
    timeout connect 5s
    timeout client 1h
    timeout server 1h

frontend pg
    bind :5432
    default_backend pg_nodes

backend pg_nodes
    server db1 10.0.0.21:5432 check
    server db2 10.0.0.22:5432 check backup

Балансировка соединений не создаёт копию данных

Проверка check лишь убеждается, что порт принимает соединение, а не что узел PostgreSQL принимает запись. Репликацию и выбор основного узла делает сам кластер, а HAProxy направляет клиентов туда, куда ему подсказывает проверка. Начать с одного узла проще: установка PostgreSQL.

05 · 1 мин

HTTPS на HAProxy: один pem-файл из сертификата Certbot#

HAProxy читает сертификат и ключ из одного файла. Строку bind :443 ssl crt /etc/haproxy/certs/app.example.com.pem дополняют переадресацией http-request redirect scheme https unless { ssl_fc } во frontend на порту 80. Файл склеивают из двух файлов Certbot, и делать это нужно при каждом продлении, поэтому скрипт кладут в каталог хуков:

#!/bin/sh
# /etc/letsencrypt/renewal-hooks/deploy/haproxy.sh
cat "$RENEWED_LINEAGE/fullchain.pem" "$RENEWED_LINEAGE/privkey.pem" \
  > "/etc/haproxy/certs/$(basename "$RENEWED_LINEAGE").pem"
systemctl reload haproxy

Не забудьте chmod +x и права, закрывающие файл ключа от чужих. Выпуск сертификата и проверку продления разбирает страница установка Certbot: HAProxy там упомянут в примере, где веб-сервер приходится останавливать на время проверки.

Инструмент · 1 мин

HAProxy на VPS или балансировщик Таймвеб Клауд#

Балансировщик Таймвеб Клауд работает как услуга: настраивается в панели, обслуживается провайдером. Цены на 14 октября 2026: 890 ₽ в месяц за одну ноду на 500 Мбит/с, 1 490 ₽ за одну ноду на 1 Гбит/с и 4 490 ₽ за две ноды.

HAProxy на своём сервере даёт полный контроль над конфигом, но сам балансировщик тоже может отказать. Для настоящей отказоустойчивости нужны два сервера с HAProxy и общий плавающий адрес, а это уже ваша админская работа. Самый младший сервер MSK Ultra 15 стоит 1 920 ₽ в месяц (1 vCPU, 1 ГБ).

HAProxy на своём сервере или балансировщик провайдера

Два ответа, и подсказка назовёт вариант, с которого стоит начать

Что нужно балансировать
Кто будет обслуживать балансировщик

07 · 1 мин

Вопросы об установке HAProxy#

Как проверить конфиг HAProxy перед перезагрузкой?

Командой haproxy -c -f /etc/haproxy/haproxy.cfg: она разберёт файл и сообщит об ошибках, не трогая работающий процесс. В Docker путь другой: /usr/local/etc/haproxy/haproxy.cfg.

Можно ли перезагрузить HAProxy без потери соединений?

Да. Команда systemctl reload haproxy запускает новый процесс с новым конфигом, а текущие соединения доживают в старом. В Docker для этого служит сигнал HUP.

Нужен ли HAProxy, если приложение работает на одном сервере?

Обычно нет. Для одного приложения хватит Caddy или Nginx. HAProxy полезен, когда копий две и больше или нужна проверка состояния и TCP-прокси.

Как посмотреть состояние серверов в HAProxy?

Включите страницу статистики через listen stats, привяжите её к 127.0.0.1 и откройте через SSH-туннель. Там видно, какие серверы пула отмечены как упавшие.

Почему этому можно верить

Как мы проверяли

Цены с сайта провайдераСняты вручную, у каждой цены указана дата проверки.
Всё можно повторитьКоманды и расчёты описаны так, что их повторит любой читатель.
Независимый справочникНе связан с разработчиками приложений и провайдерами и пишет о минусах тоже.

Источники цифр на этой странице: VPS и VDS серверы Таймвеб Клауд, timeweb.cloud/services/vds-vps, проверено 14 октября 2026; Маркетплейс приложений Таймвеб Клауд, timeweb.cloud/marketplace, проверено 14 октября 2026; Балансировщики нагрузки Таймвеб Клауд, timeweb.cloud/services/load-balancer, проверено 14 октября 2026; Docker Hub: образ HAProxy (README docker-library), github.com/docker-library/docs/blob/master/haproxy/README.md, проверено 15 октября 2026.

SBРедакция SelfBase · обновлено 16 октября 2026

Запустите свой сервер за пару минут

Почасовая оплата: тестовый стенд на сутки стоит десятки рублей, а не месячный тариф.

  • NVMe-диски и гарантированная доля процессора
  • Root-доступ и любой софт, от Docker до игровых серверов
  • Маркетплейс: 91 приложение в один клик
  • Бесплатный перенос проекта силами специалистов
Свой или провайдера