Главная/Разработка/HAProxy
Установка HAProxy для балансировки нагрузки и TCP-прокси
Установка HAProxy на VPS превращает один сервер в балансировщик нагрузки: он принимает соединения и раздаёт их по нескольким серверам, исключая упавшие после проверки. Балансировщик нагрузки, то есть программа, которая распределяет запросы между копиями приложения, нужен, когда одного сервера мало или обновление не должно останавливать сайт.
Ответ за 30 секунд
Для одного приложения HAProxy не нужен: хватит Caddy или Nginx. Он окупается, когда копий приложения две и больше или нужен TCP-прокси к базе. Если задача сводится к раздаче HTTP по двум серверам, сначала сравните его с балансировщиком провайдера.
Почасовая оплата: поднимите три сервера на время проверки схемы, смоделируйте отказ узла и удалите стенд.
HAProxy на VPS или балансировщик Таймвеб Клауд2 режимаhttp и tcp в одном конфиге
890 ₽балансировщик провайдера в месяц на 14.10
ltsтег образа для Docker
01 · 1 мин
Что делает HAProxy и чем он отличается от Nginx#
HAProxy это программа с открытым кодом, которая только принимает и перенаправляет соединения. Статические файлы он не раздаёт и PHP не запускает, зато умеет то, ради чего его ставят: проверять состояние серверов, исключать упавшие, считать запросы и ограничивать их, показывать статистику.
| Задача | Чем решать |
|---|---|
| Один сайт или контейнер, нужен HTTPS | Caddy или Nginx |
| Две и больше копии приложения, проверка состояния | HAProxy или балансировщик провайдера |
| TCP-трафик: базы, SSH, MQTT | HAProxy в режиме 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.
- Проверьте файл до применения:
haproxy -c -f /etc/haproxy/haproxy.cfg. - Примените без обрыва соединений:
sudo systemctl reload haproxy. - Откройте порты, которые слушает 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.
Запустите свой сервер за пару минут
Почасовая оплата: тестовый стенд на сутки стоит десятки рублей, а не месячный тариф.
- NVMe-диски и гарантированная доля процессора
- Root-доступ и любой софт, от Docker до игровых серверов
- Маркетплейс: 91 приложение в один клик
- Бесплатный перенос проекта силами специалистов