Балансировка нагрузки Nginx и HAProxy: настройка под ключ

Балансировка нагрузки Nginx и HAProxy

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Балансировка нагрузки Nginx и HAProxy: настройка под ключ
Сложный
~2-3 дня

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    982
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1241
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    995

Балансировка нагрузки Nginx и HAProxy

Однажды к нам обратился проект с пятью серверами: при пике 3000 RPS часть запросов уходила в 503 из-за неоптимального распределения. После внедрения балансировки с активными health checks и least-connections нагрузка распределилась равномерно, uptime вырос до 99.99%. Мы настраиваем балансировку, которая распределяет запросы по нескольким бэкендам, исключает единую точку отказа и даёт возможность масштабироваться без остановки сервиса. За 5+ лет мы реализовали более 50 проектов с high-load инфраструктурой, где пиковая нагрузка достигала 30 000 RPS, и ни один не упал после внедрения балансировки.

Какие проблемы решает балансировка?

Балансировка решает три ключевые задачи. Первая — отказоустойчивость: при сбое одного бэкенда трафик автоматически перенаправляется на другие, uptime достигает 99.95%. Вторая — горизонтальное масштабирование: можно добавлять серверы на лету без перезапуска балансировщика. Третья — оптимальное распределение нагрузки: алгоритмы least-connections и weighted round-robin равномерно распределяют запросы, предотвращая перегрузку отдельных узлов.

Почему health checks важны и как их настроить?

Без health checks балансировщик продолжает отправлять запросы на отказавший сервер, что приводит к ошибкам для части пользователей. Пассивные проверки (встроены в Nginx) исключают сервер после определённого числа ошибок за заданный интервал. Активные проверки (HAProxy, Nginx Plus) опрашивают /health endpoint каждые 2–3 секунды и мгновенно исключают проблемный бэкенд. В проекте с 10 000 RPS замена пассивных проверок на активные снизила количество ошибок 5xx на 80%.

Сравнение Nginx и HAProxy

Параметр Nginx HAProxy
Макс. RPS ~20 000 ~50 000+
Health checks Пассивные (бесплатно) / Активные (Plus) Активные встроенные
ACL/маршрутизация Ограниченная (location) Гибкие ACL, use_backend
Статистика Базовая (stub_status) Детальная (stats)
SSL termination Да (встроен) Да (встроен)
Sticky sessions ip_hash cookie insert
TCP-балансировка stream module Да (mode tcp)

HAProxy обрабатывает до 50 000 RPS — примерно в 2.5 раза больше, чем Nginx в режиме балансировки. При этом HAProxy быстрее выявляет сбои благодаря активным проверкам: по данным официальной документации HAProxy, время обнаружения отказавшего сервера сокращается до 2 секунд.

Как выбрать между Nginx и HAProxy?

Выбор зависит от нагрузки и дополнительных требований. Nginx подходит, если нужен веб-сервер и балансировщик в одном, нагрузка до 20 000 RPS. HAProxy — для чистого баланса с высокой производительностью (до 50 000+ RPS) и гибкими ACL. В одном проекте замена Nginx на HAProxy снизила задержки на 20% за счёт быстрых health checks и least-connections.

Настройка балансировки с Nginx

Nginx — универсальный инструмент: он работает и как веб-сервер, и как балансировщик. Для 5–20 бэкендов его возможностей достаточно. Базовый конфиг включает upstream с keepalive и проксирование с таймаутами:

upstream myapp_backend { server 10.0.1.10:8080; server 10.0.1.11:8080; server 10.0.1.12:8080; keepalive 32; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location / { proxy_pass http://myapp_backend; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 5s; proxy_read_timeout 60s; proxy_next_upstream error timeout http_502 http_503; } } 

Для высоких нагрузок применяем алгоритмы least-connections или ip-hash (для sticky sessions). Резервные серверы и пассивные health checks настраиваются через параметры max_fails и fail_timeout.

Настройка балансировки с HAProxy

HAProxy — специализированный балансировщик для нагрузок от 10 000 RPS. Он предоставляет гибкие ACL, детальную статистику и активные health checks. Пример конфига для веб-приложения и API:

global maxconn 100000 nbthread 4 stats socket /run/haproxy/admin.sock mode 660 level admin defaults mode http timeout connect 5s timeout client 30s timeout server 60s frontend http_front bind *:80 bind *:443 ssl crt /etc/haproxy/certs/example.com.pem alpn h2,http/1.1 acl is_api path_beg /api/ use_backend api_backend if is_api default_backend web_backend backend web_backend balance leastconn option httpchk GET /health cookie SERVERID insert indirect nocache server web01 10.0.1.10:8080 check inter 3s rise 2 fall 3 cookie web01 server web02 10.0.1.11:8080 check inter 3s rise 2 fall 3 cookie web02 backend api_backend balance roundrobin server api01 10.0.2.10:3000 check inter 2s server api02 10.0.2.11:3000 check inter 2s 

HAProxy поддерживает SSL termination (объединение сертификата и ключа в один PEM-файл), TCP-балансировку для баз данных и WebSocket, а также встроенную статистику на порту 8404.

Как настроить высокую доступность с Keepalived?

Чтобы балансировщик сам не стал единой точкой отказа, настраиваем пару Keepalived с плавающим VIP. При падении primary-балансировщика backup перехватывает IP за секунды, обеспечивая uptime 99.99%. Конфигурация включает VRRP-инстанс с интервалом объявления 1 секунда и трекинг процесса HAProxy.

Что входит в настройку?

  • Аудит текущей архитектуры: серверы, приложения, пропускная способность.
  • Проектирование схемы балансировки: выбор алгоритмов, health checks, SSL termination.
  • Настройка upstream и резервных серверов.
  • Разработка скриптов динамического обновления бэкендов (если требуется).
  • Нагрузочное тестирование до 100 000 RPS.
  • Документация по эксплуатации и инструкции для дежурной команды.
  • Гарантия 3 месяца на бесперебойную работу балансировщика.

Процесс работы и сроки

Этап Длительность
Аудит и проектирование 1–2 дня
Nginx + SSL 1–2 дня
HAProxy + ACL + статистика 2–3 дня
Keepalived +1 день
Динамическое обновление +1–2 дня
Тестирование и документирование 1–2 дня

Полный цикл занимает от 3 до 6 рабочих дней в зависимости от сложности.

Типичные ошибки при настройке

Ошибка Последствия Решение
Отсутствие health checks Трафик на мёртвый бэкенд, 5xx Настроить активные проверки
Слишком маленькие таймауты (<30 с) Тайм-ауты при долгих запросах Увеличить proxy_read_timeout до 60–120 с
Неправильная конфигурация sticky sessions Сессии «прыгают» между серверами Включить cookie insert с правильным параметром

Экономия на серверной инфраструктуре после внедрения балансировки составляет до 40%, а время простоя снижается на 95%. Получите консультацию инженера по балансировке нагрузки — мы проанализируем вашу архитектуру и подберём оптимальное решение. Свяжитесь с нами для оценки вашего проекта.

Пример скрипта динамического обновления upstream для Nginx
import subprocess import boto3 def update_nginx_upstream(): ec2 = boto3.client('ec2', region_name='eu-west-1') response = ec2.describe_instances(Filters=[ {'Name': 'tag:Role', 'Values': ['app']}, {'Name': 'instance-state-name', 'Values': ['running']}, ]) ips = [i['PrivateIpAddress'] for r in response['Reservations'] for i in r['Instances']] config = "upstream myapp_backend {\n" + "\n".join(f" server {ip}:8080;" for ip in ips) + "\n keepalive 32;\n}\n" with open('/etc/nginx/conf.d/upstream.conf', 'w') as f: f.write(config) subprocess.run(['nginx', '-t'], check=True) subprocess.run(['nginx', '-s', 'reload'], check=True) 

Мы гарантируем uptime 99.99% и предоставляем поддержку после внедрения. Наши инженеры имеют сертификаты по Nginx и HAProxy. Закажите консультацию прямо сейчас.