Налаштування балансування навантаження для 1С-Бітрікс
Налаштування балансування навантаження для 1С-Бітрікс
Два сервери 1С-Бітрікс без балансувальника — не кластер, а два незалежних сайти. Потрібна єдина точка входу, яка розподіляє запити, перевіряє здоров'я бекендів і прибирає недоступні ноди з ротації без ручного втручання. Для 1С-Бітрікс правильне налаштування балансувальника включає особливу обробку завантаження файлів, адміністративного розділу та веб-сокетів push-сервера.
HAProxy vs nginx upstream
HAProxy — спеціалізований балансувальник, працює на L4 і L7. Гнучка маршрутизація, детальна статистика, health checks з кастомними HTTP-перевірками. Кращий для production.
nginx upstream — простіший у налаштуванні, інтегрований з рештою конфігурації nginx. Достатній для 2–3 нод без складної логіки маршрутизації.
Конфігурація HAProxy для 1С-Бітрікс
# /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 — запити направляються на сервер з найменшою кількістю активних з'єднань. Для 1С-Бітрікс переважніший 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 лише на буфери.
1С-Бітрікс: передача реального IP
1С-Бітрікс використовує 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.







