Установка и настройка HAProxy на Debian 11

О чём эта статья
Это практическое руководство показывает, как шаг за шагом установить и настроить HAProxy на Debian 11 для балансировки HTTP‑трафика между двумя Apache‑серверами. Подойдёт для тестовой и начальной production‑настройки.
Важно: HAProxy — это балансировщик нагрузки и прокси уровня L4/L7. Он отвечает за распределение запросов между серверами и проверку их работоспособности.
Требования
- Сервер с Debian 11 для HAProxy.
- Два сервера с Debian 11 для Apache (бэкенды).
- Пароль root настроен на всех серверах (или эквивалентный доступ через sudo).
Подготовка бэкенд‑веб‑серверов
На каждом из двух бэкендов установите Apache и создайте простую тестовую страницу.
На первом бэкенд‑сервере выполните:
apt-get install apache2 -yСоздайте тестовую страницу:
echo "Welcome to the first Apache Server
" | tee /var/www/html/index.htmlНа втором бэкенд‑сервере повторите:
apt-get install apache2 -yИ создайте свою тестовую страницу:
echo "Welcome to the second Apache Server
" | tee /var/www/html/index.htmlПосле этого переходите к установке HAProxy.
Установка HAProxy
HAProxy входит в стандартные репозитории Debian 11. Установите пакет и включите сервис в автозагрузку:
apt-get install haproxy -yЗапустите сервис и включите автозапуск:
systemctl start haproxy
systemctl enable haproxyКонфигурация HAProxy
Отредактируйте файл конфигурации:
nano /etc/haproxy/haproxy.cfgДобавьте (или измените) секции фронтенда и бэкенда, например:
frontend apache_front
# Frontend listen port - 80
bind *:80
# Set the default backend
default_backend apache_backend_servers
# Enable send X-Forwarded-For header
option forwardfor
# Define backend
backend apache_backend_servers
# Use roundrobin to balance traffic
balance roundrobin
# Define the backend servers
server backend01 192.168.1.10:80 check
server backend02 192.168.1.11:80 check
Сохраните файл. Примечание: 192.168.1.10 и 192.168.1.11 — IP‑адреса ваших первых и вторых Apache‑серверов соответственно.
Перезапустите HAProxy для применения изменений:
systemctl restart haproxyПроверьте статус сервиса:
systemctl status haproxyПример ожидаемого вывода сервиса (в вашем окружении значения PID/время будут другими):
? haproxy.service - HAProxy Load Balancer
Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-11-07 03:47:14 UTC; 9s ago
Docs: man:haproxy(1)
file:/usr/share/doc/haproxy/configuration.txt.gz
Process: 86678 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS)
Main PID: 86680 (haproxy)
Tasks: 3 (limit: 4679)
Memory: 34.2M
CPU: 61ms
CGroup: /system.slice/haproxy.service
??86680 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
??86682 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
Nov 07 03:47:14 debian11 systemd[1]: Starting HAProxy Load Balancer...
Nov 07 03:47:14 debian11 haproxy[86680]: Proxy apache_front started.
Nov 07 03:47:14 debian11 haproxy[86680]: Proxy apache_front started.
Nov 07 03:47:14 debian11 systemd[1]: Started HAProxy Load Balancer.
Nov 07 03:47:14 debian11 haproxy[86680]: [NOTICE] 310/034714 (86680) : New worker #1 (86682) forked
Nov 07 03:47:14 debian11 haproxy[86680]: Proxy apache_backend_servers started.
Nov 07 03:47:14 debian11 haproxy[86680]: Proxy apache_backend_servers started.
Проверка работы
Откройте в браузере http://
curl -s http:/// | grep -i Welcome 

Дополнительно: статистика HAProxy (опционально)
Для контроля удобно открыть встроенную страницу статистики. Пример добавления простого слушателя статистики в конфиг (разместите в конце /etc/haproxy/haproxy.cfg):
listen stats
bind *:9000
stats enable
stats uri /haproxy_stats
stats refresh 30s
stats auth admin:strongpasswordПосле перезапуска вы сможете открыть http://
Безопасность и рекомендации для production
- Не публикуйте страницу статистики в открытый интернет. Используйте VPN/ACL или HTTPS с базовой аутентификацией.
- Отключите ненужные возможности в конфиге и запустите haproxy от отдельного пользователя (обычно haproxy). Задайте chroot, если это поддерживается и необходимо.
- Для HTTPS‑терминации лучше настроить TLS на HAProxy (bind *:443 ssl crt /etc/ssl/private/site.pem) и пробросать HTTP на бэкенды.
- Включите логирование в syslog для последующего мониторинга.
- Настройте health checks (команда check уже используется в примере) и таймауты в конфиге для корректного обнаружения недоступных бэкендов.
Отладка и распространённые проблемы
- Проблема: при запросе виден только один бэкенд. Причины: кеш браузера, отсутствие roundrobin, sticky‑сессии на бэкенде. Решение: очистите кеш, проверьте конфиг, убедитесь, что у Apache нет собственных механизмов удержания сессий.
- Проблема: бэкенды помечаются как DOWN. Причины: firewall, неправильный порт, приложение не слушает. Решение: проверить доступность бэкенда с HAProxy (curl или telnet по IP:порт), проверьте правила iptables/ufw.
- Логи: смотрите /var/log/syslog или конкретные логи haproxy при наличии отдельного файла логов.
Когда HAProxy не подойдёт
- Если вам нужна глубокая обработка приложений на уровне кода (например, бизнес‑логика маршрутизации), это задача уровня reverse‑proxy с интеграцией в приложение.
- Для extremely high throughput на уровне L4 в некоторых случаях используют LVS или аппаратные решения.
Модель принятия решения (коротко)
- Нужна ли балансировка? Да, если несколько копий сервиса или требуется высокая доступность.
- Нужен ли L7‑функционал (перезапись URL, header‑manipulation, SSL termination)? Тогда HAProxy подходит.
- Нужны ли sticky‑сессии? HAProxy поддерживает, но подумайте о хранении сессий в общем хранилище (Redis) как более масштабируемой опции.
Критерии приёмки
- HAProxy отвечает на порту 80 с IP сервера.
- При обновлении страницы ответы чередуются между двумя бэкендами (roundrobin) или поведение соответствует выбранной политике балансировки.
- Оба бэкенда находятся в состоянии UP согласно странице stats или через curl к сокету статистики.
- Логи не содержат критических ошибок после перезапуска.
- Настроен способ доступа к stats (VPN/ACL/HTTPS), если stats включены.
Чек‑лист ролей
- Оператор/DevOps:
- Настроить сервер HAProxy, резервные копии конфига, мониторинг и алерты.
- Обеспечить доступ к странице stats только для админов.
- Разработчик:
- Проверить корректность ответов приложения и заголовков X‑Forwarded‑For.
- Убедиться, что приложение корректно обрабатывает повторные запросы.
- QA:
- Прогнать сценарии отказа бэкендов и проверить поведение HAProxy.
Откат изменений (быстрый план)
- Вернуть резервную копию /etc/haproxy/haproxy.cfg.bak:
cp /etc/haproxy/haproxy.cfg.bak /etc/haproxy/haproxy.cfg
systemctl restart haproxy- Если проблема критична — временно отключить HAProxy и направить трафик напрямую на бэкенд (маршрутизация/обновление DNS/внешний балансировщик) до устранения.
Короткая методология развертывания
- Подготовить бэкенды и проверить работоспособность приложений.
- Установить HAProxy и сделать резервную копию стандартного конфига.
- Внедрить базовую конфигурацию фронтенда/бэкенда.
- Добавить мониторинг и страницу stats (опционально).
- Прогнать тесты отказоустойчивости.
- Плавно перевести боевой трафик.
Краткое резюме
HAProxy — лёгкое и эффективное решение для балансировки нагрузки на Debian 11. Начинайте с базовой конфигурации, добавьте мониторинг и TLS‑терминацию для production. Тщательно тестируйте сценарии отказа и имейте план отката.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента