Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Глобальные директивы
global_directives

Глобальные директивы

Секция global: процессы, логирование, tuning ядра, security limits

Глобальные директивы HAProxy

Секция global управляет процессом HAProxy: количество процессов, логирование, security limits и tuning ядра.

#Структура секции global

global # Процессы и daemon daemon master-worker nbproc 1 nbthread 4 # Логирование log /dev/log local0 info log-tag haproxy # Security limits ulimit-n 100000 maxconn 50000 # Tuning tune.ssl.default-dh-param 2048 tune.bufsize 16384 # SSL ssl-default-bind-ciphers ECDHE+AESGCM:DHE+AESGCM ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

#Процессы и потоки

#daemon

global daemon

Назначение: Запуск HAProxy в фоновом режиме (daemon mode).

Поведение:

  • HAProxy fork'ится и родительский процесс завершается
  • PID записывается в /var/run/haproxy.pid
  • Логи идут в syslog, не в терминал

Когда использовать:

  • ✅ Классический запуск через /etc/init.d/haproxy
  • ❌ Не используется с master-worker mode

#master-worker

global master-worker

Назначение: Современный режим управления процессами.

Архитектура:

Master Process (управление)
    ├── Worker Process 1 (трафик)
    ├── Worker Process 2 (трафик)
    └── Agent Process (health checks)

Преимущества:

  • Zero-downtime reload без потери соединений
  • Автоматический restart worker процессов при падении
  • Удобно для container/orchestrator сред

#nbproc и nbthread

global nbproc 1 # Устарело, не использовать в 2.x+ nbthread 4 # Количество потоков на процесс

nbthread:

  • Количество потоков в каждом worker процессе
  • Рекомендуется: равно числу CPU ядер
  • Пример: 8 ядер → nbthread 8

nbproc (устарело):

  • Количество процессов (до HAProxy 2.x)
  • В 2.x+ используется master-worker + nbthread

Важно: SSL session sharing не работает между процессами, только между потоками. Используйте nbthread вместо nbproc.

#Логирование

#Базовая настройка log

global log /dev/log local0 info

Параметры:

  • /dev/log — сокет syslog
  • local0 — facility (можно local0-local7)
  • info — уровень логирования (debug, info, notice, warning, err)

#Уровни логирования

УровеньОписаниеКогда использовать
debugДетальная отладкаDevelopment, troubleshooting
infoИнформация о запросахProduction (стандарт)
noticeТолько важные событияHigh-traffic production
warningПредупрежденияМинимальное логирование
errТолько ошибкиКритичные системы

#Логирование в файл

global log /var/log/haproxy.log local0 info

Не рекомендуется для production:

  • Нет ротации из коробки
  • Может замедлить работу при синхронной записи
  • Лучше использовать rsyslog/journald

#log-tag

global log-tag haproxy

Назначение: Добавляет тег к сообщениям для фильтрации в syslog.

Пример в syslog:

Jan 15 10:23:45 server haproxy[1234]: ...

#Security limits

#ulimit-n

global ulimit-n 100000

Назначение: Устанавливает мягкий лимит на количество открытых файловых дескрипторов (FD).

Расчёт:

ulimit-n = maxconn × 2 + резерв
ulimit-n = 50000 × 2 + 1000 = 101000

Почему × 2:

  • Каждое соединение = 2 FD (клиент + backend)
  • Плюс системные FD (логи, сокеты)

Системные требования:

# Проверка текущего лимита ulimit -n # Установка в /etc/security/limits.conf haproxy soft nofile 100000 haproxy hard nofile 100000

#maxconn

global maxconn 50000

Назначение: Максимальное количество одновременных соединений для всего процесса.

Отличие от ulimit-n:

  • maxconn — ограничение на уровне HAProxy
  • ulimit-n — ограничение на уровне ОС

Рекомендации:

  • Начните с 5000-10000
  • Увеличивайте постепенно под нагрузкой
  • Мониторьте через stats страницу

#Tuning параметры

#tune.ssl.default-dh-param

global tune.ssl.default-dh-param 2048

Назначение: Размер DH параметров для DHE cipher suites.

Безопасность:

  • 2048 — минимум для production
  • 4096 — для повышенных требований безопасности
  • Влияет на производительность (больше = медленнее handshake)

#tune.bufsize

global tune.bufsize 16384

Назначение: Размер буфера для HTTP заголовков.

Когда увеличивать:

  • Большие cookies (JWT, сессии)
  • Кастомные заголовки (микросервисы)
  • Reverse proxy для legacy приложений

Значения:

  • 4096 — по умолчанию (достаточно для большинства)
  • 16384 — для больших заголовков
  • 32768 — extreme cases

#tune.maxrewrite

global tune.maxrewrite 1024

Назначение: Буфер для HTTP rewrite операций (reqadd, reqdel, http-request).

Когда менять:

  • Много операций модификации заголовков
  • Сложные ACL с rewrite

#SSL настройки

#ssl-default-bind-ciphers

global ssl-default-bind-ciphers ECDHE+AESGCM:DHE+AESGCM:ECDHE+SHA256:DHE+SHA256

Современные cipher suites (2024):

  • ECDHE+AESGCM — предпочтительно (быстро, безопасно)
  • DHE+AESGCM — fallback для старых клиентов
  • Избегайте: RC4, DES, 3DES, MD5

#ssl-default-bind-options

global ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

Параметры:

  • ssl-min-ver TLSv1.2 — запретить TLS 1.0/1.1
  • no-tls-tickets — отключить session tickets (security)
  • ssl-max-ver TLSv1.3 — разрешить TLS 1.3

#ssl-default-server-ciphers

global ssl-default-server-ciphers ECDHE+AESGCM:DHE+AESGCM

Назначение: Cipher suites для соединений HAProxy → backend (если используется SSL).

#Полная секция global для production

global # Режим работы master-worker nbthread 8 # Логирование log /dev/log local0 info log-tag haproxy # Limits ulimit-n 100000 maxconn 50000 # SSL tune.ssl.default-dh-param 2048 ssl-default-bind-ciphers ECDHE+AESGCM:DHE+AESGCM:ECDHE+SHA256:DHE+SHA256 ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets ssl-default-server-ciphers ECDHE+AESGCM:DHE+AESGCM # Tuning tune.bufsize 16384 tune.maxrewrite 1024 # Stats socket (для управления) stats socket /var/run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s

#Tuning ядра Linux

Для высокой производительности настройте sysctl:

# /etc/sysctl.d/60-haproxy.conf # Увеличиваем очередь входящих соединений net.core.somaxconn = 10240 # Разрешаем reuse TIME_WAIT сокетов net.ipv4.tcp_tw_reuse = 1 # Уменьшаем время FIN_WAIT net.ipv4.tcp_fin_timeout = 15 # Расширяем диапазон ephemeral ports net.ipv4.ip_local_port_range = 1024 65535 # Увеличиваем буферы TCP net.ipv4.tcp_rmem = 4096 87380 67108864 net.ipv4.tcp_wmem = 4096 65536 67108864 # Отключаем slow start после idle net.ipv4.tcp_slow_start_after_idle = 0

Применение:

sudo sysctl -p /etc/sysctl.d/60-haproxy.conf

#Проверка настроек

# Проверка ulimit cat /proc/$(pidof haproxy)/limits | grep "open files" # Проверка maxconn через stats socket echo "show info" | socat /var/run/haproxy/admin.sock stdio | grep Maxconn # Проверка sysctl sysctl net.core.somaxconn sysctl net.ipv4.ip_local_port_range

Далее: Defaults и логины