Настройка балансировки нагрузки для 1С-Битрикс
Настройка балансировки нагрузки для 1С-Битрикс
Два сервера Битрикс без балансировщика — не кластер, а два независимых сайта. Нужна единая точка входа, которая распределяет запросы, проверяет здоровье бэкендов и убирает недоступные ноды из ротации без ручного вмешательства. Для Битрикс корректная настройка балансировщика включает особую обработку загрузки файлов, административного раздела и веб-сокетов push-сервера.
HAProxy vs nginx upstream
HAProxy — специализированный балансировщик, работает на L4 и L7. Гибкая маршрутизация, детальная статистика, health checks с кастомными HTTP-проверками. Предпочтителен для production.
nginx upstream — проще в настройке, интегрирован с остальной конфигурацией nginx. Достаточен для 2–3 нод без сложной логики маршрутизации.
Конфигурация HAProxy для Битрикс
# /etc/haproxy/haproxy.cfg
global
maxconn 50000
log /dev/log local0
tune.ssl.default-dh-param 2048
defaults
mode http
timeout connect 5s
timeout client 60s
timeout server 60s
option http-server-close
option forwardfor
log global
# Фронтенд: принимаем HTTPS
frontend bitrix_https
bind *:443 ssl crt /etc/ssl/site.pem
http-request set-header X-Forwarded-Proto https
http-request set-header X-Real-IP %[src]
# Административный раздел — на выделенный бэкенд
acl is_admin path_beg /bitrix/admin
use_backend bitrix_admin if is_admin
# Push-сервер — отдельный бэкенд с долгими соединениями
acl is_push path_beg /bitrix/pub
use_backend bitrix_push if is_push
default_backend bitrix_web
# Основной бэкенд — веб-ноды
backend bitrix_web
balance leastconn
option httpchk GET /bitrix/admin/cluster_check.php
http-check expect status 200
server web-01 10.0.0.11:80 check inter 5s rise 2 fall 3 weight 100
server web-02 10.0.0.12:80 check inter 5s rise 2 fall 3 weight 100
server web-03 10.0.0.13:80 check inter 5s rise 2 fall 3 weight 100
# Административная панель — только на мастер-ноду
backend bitrix_admin
server web-01 10.0.0.11:80 check
# Push-сервер
backend bitrix_push
timeout server 3600s
server push-01 10.0.0.14:8893 check
balance leastconn — запросы направляются на сервер с наименьшим числом активных соединений. Для Битрикс предпочтительнее roundrobin: запросы неоднородны по времени выполнения — тяжёлый импорт на одной ноде не должен блокировать распределение.
rise 2 fall 3 — нода считается живой после 2 успешных проверок, мёртвой — после 3 неудачных. Баланс между быстрым обнаружением отказа и ложными срабатываниями.
nginx upstream как альтернатива
upstream bitrix_backends {
least_conn;
server 10.0.0.11:80 weight=1 max_fails=3 fail_timeout=30s;
server 10.0.0.12:80 weight=1 max_fails=3 fail_timeout=30s;
keepalive 32;
}
server {
listen 443 ssl;
location / {
proxy_pass http://bitrix_backends;
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;
# Для загрузки файлов
client_max_body_size 256m;
proxy_read_timeout 120s;
}
}
keepalive 32 — постоянные соединения между nginx и бэкендами. Без keepalive каждый запрос открывает новое TCP-соединение к PHP-FPM — накладные расходы на handshake.
Проксирование загрузки файлов
Загрузка больших файлов (прайсы 100+ МБ, видео) через балансировщик требует настройки:
# На балансировщике
proxy_request_buffering off; # не буферизуем тело запроса в памяти
proxy_max_temp_file_size 0;
client_max_body_size 512m;
proxy_read_timeout 600s;
Без proxy_request_buffering off nginx буферизует весь загружаемый файл в памяти перед отправкой бэкенду — при 512 МБ файле и 10 параллельных загрузках это 5 ГБ RAM только на буферы.
Битрикс: передача реального IP
Битрикс использует IP пользователя для сессий и ограничений. Без настройки он видит IP балансировщика. В php.ini или в конфиге:
// /bitrix/php_interface/init.php
if (!empty($_SERVER['HTTP_X_REAL_IP'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
}
HAProxy передаёт реальный IP через X-Forwarded-For, nginx — через X-Real-IP. Синхронизируем настройки балансировщика и init.php.







