Установка HAProxy для балансировки нагрузки и TCP-прокси: коротко и с данными
Конспект страницы: 7 разделов коротко, данные на 14 октября 2026 и ответы на 4 вопроса. Полный разбор с примерами: Установка HAProxy для балансировки нагрузки и TCP-прокси.
Коротко
Установка HAProxy на VPS превращает один сервер в балансировщик нагрузки: он принимает соединения и раздаёт их по нескольким серверам, исключая упавшие после проверки. Балансировщик нагрузки, то есть программа, которая распределяет запросы между копиями приложения, нужен, когда одного сервера мало или обновление не должно останавливать сайт. Для одного приложения HAProxy не нужен: хватит Caddy или Nginx.
Конспект по разделам
Что делает HAProxy и чем он отличается от Nginx
HAProxy это программа с открытым кодом, которая только принимает и перенаправляет соединения. Статические файлы он не раздаёт и PHP не запускает, зато умеет то, ради чего его ставят: проверять состояние серверов, исключать упавшие, считать запросы и ограничивать их, показывать статистику.
Установка 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.
Рабочий haproxy.cfg: балансировка двух копий приложения
Что здесь важно. Слово check включает проверку состояния: при ответе 2xx или 3xx на /health сервер остаётся в пуле, иначе исключается. Алгоритм roundrobin раздаёт запросы по кругу, а leastconn лучше для долгих соединений.
TCP-прокси на HAProxy: PostgreSQL, Redis, SSH
Режим tcp не разбирает содержимое, он передаёт байты и проверяет доступность порта. Отдельный файл для базы выглядит так: Балансировка соединений не создаёт копию данных Проверка check лишь убеждается, что порт принимает соединение, а не что узел PostgreSQL принимает запись. Репликацию и выбор основного узла делает сам кластер, а HAProxy направляет клиентов туда, куда ему подсказывает проверка.
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, и делать это нужно при каждом продлении, поэтому скрипт кладут в каталог хуков: Не забудьте chmod +x и права, закрывающие файл ключа от чужих.
HAProxy на VPS или балансировщик Таймвеб Клауд
Балансировщик Таймвеб Клауд работает как услуга: настраивается в панели, обслуживается провайдером. Цены на 14 октября 2026: 890 ₽ в месяц за одну ноду на 500 Мбит/с, 1 490 ₽ за одну ноду на 1 Гбит/с и 4 490 ₽ за две ноды. HAProxy на своём сервере даёт полный контроль над конфигом, но сам балансировщик тоже может отказать.
Запустите свой сервер за пару минут
Почасовая оплата: тестовый стенд на сутки стоит десятки рублей, а не месячный тариф.
- NVMe-диски и гарантированная доля процессора
- Root-доступ и любой софт, от Docker до игровых серверов
- Маркетплейс: 91 приложение в один клик
- Бесплатный перенос проекта силами специалистов
Данные
| Задача | Чем решать |
|---|---|
| Один сайт или контейнер, нужен HTTPS | Caddy или Nginx |
| Две и больше копии приложения, проверка состояния | HAProxy или балансировщик провайдера |
| TCP-трафик: базы, SSH, MQTT | HAProxy в режиме tcp |
| Десятки сервисов, которые часто меняются | Traefik или кластер Kubernetes |
Данные на 14 октября 2026.
Вопросы и ответы
Как проверить конфиг 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-туннель. Там видно, какие серверы пула отмечены как упавшие.