
Сайты на 1С-Битрикс и особенно в окружении BitrixVM часто становятся целью DDoS-атак и агрессивных ботов, которые могут вызвать перегрузку сервера и недоступность проекта. Даже небольшой наплыв вредоносных запросов способен “повесить” сервер, особенно если речь идёт о тяжёлых PHP-страницах или административном разделе.
Один из надёжных способов снизить нагрузку и защитить сайт — использовать встроенные в Nginx механизмы ограничения запросов: limit_req
и limit_conn
.
Что такое limit_req
и limit_conn
?
limit_req
ограничивает частоту запросов от одного клиента (по IP). Если пользователь или бот начинает слишком часто отправлять запросы, лишние будут отброшены или задержаны.limit_conn
ограничивает количество одновременных соединений с одного IP.
- Снизить нагрузку на сервер BitrixVM
- Отсекать подозрительные IP-адреса
- Затруднить работу парсерам и агрессивным ботам
- Смягчить эффект от DDoS-атак
1. Базовая настройка в nginx.conf
Откройте файл конфигурации /etc/nginx/nginx.conf и в блоке http { ... } перед закрывающей фигурной скобкой добавьте:
limit_req_zone $binary_remote_addr zone=req_per_ip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m;
zone=req_per_ip:10m
— создаёт зону памяти для хранения счётчиков запросов на 10 МБ.rate=10r/s
— не более 10 запросов в секунду с одного IP.limit_conn_zone
— хранит количество одновременных соединений.
2. Ограничения на уровне конфигурации сайта
Откройте файл:
/etc/nginx/bx/site_enabled/ваш_сайт_ssl.conf
В блоке server { ... } после строки:
root /home/bitrix/www;
добавьте:
limit_conn conn_per_ip 30;
location ~* ^/(bitrix/admin|bitrix/tools|rest|ajax) {
limit_req_status 429;
limit_req zone=req_per_ip burst=10 nodelay;
limit_conn conn_per_ip 10;
proxy_pass $proxyserver; # вместо try_files используем proxy_pass
}
location ~* \.(jpg|jpeg|png|gif|svg|ico|css|js|woff2?|ttf|eot)$ {
try_files $uri @proxy;
access_log off;
expires 7d;
add_header Cache-Control "public";
}
error_page 429 = @limit_reached;
location @limit_reached {
return 429 "Too Many Requests - try later\n";
add_header Content-Type text/plain;
}
location @proxy {
proxy_pass $proxyserver;
}
Что это даёт:
- Сразу после корневого пути сайта включается ограничение на одновременные соединения (
limit_conn
). - Для административных зон и API-запросов (
/bitrix/admin
, REST, AJAX) выставляются строгие лимиты. - Статические файлы (CSS, JS, картинки) обслуживаются без ограничений и с кэшированием.
- Ошибка превышения лимита (
429
) обрабатывается отдельным блоком.
3. Защита в bitrix.conf
Для BitrixVM важно не просто внести изменения, а полностью заменить текущий файл /etc/nginx/bx/conf/bitrix.conf
на приведённый ниже.
Это обеспечит корректную работу лимитов на всех уровнях: PHP-обработка, главная страница, внутренние страницы.
Перед заменой сделайте резервную копию:
cp /etc/nginx/bx/conf/bitrix.conf /etc/nginx/bx/conf/bitrix.conf.bak
Новый конфиг:
# cache condition variable
set $usecache "";
if ($is_global_cache = 1) { set $usecache "${usecache}A"; }
# main config
include bx/conf/bitrix_general.conf;
# PHP обработка
location ~ \.php$ {
limit_req_status 429;
limit_req zone=req_per_ip burst=10 nodelay;
limit_conn conn_per_ip 10;
set $cache_file "bitrix/html_pages$general_key@$args.html";
if (-f "$docroot/bitrix/html_pages/.enabled") { set $usecache "${usecache}B"; }
if (-f "$docroot/$cache_file") { set $usecache "${usecache}C"; }
if ($usecache = "ABC" ) { rewrite .* /$cache_file last; }
proxy_pass $proxyserver;
}
# Главная страница
location ~ /$ {
limit_req_status 429;
limit_req zone=req_per_ip burst=20;
set $cache_file "bitrix/html_pages$general_key/index@$args.html";
if (-f "$docroot/bitrix/html_pages/.enabled") { set $usecache "${usecache}B"; }
if (-f "$docroot/$cache_file") { set $usecache "${usecache}C"; }
if ($usecache = "ABC" ) { rewrite .* /$cache_file last; }
proxy_pass $proxyserver;
}
# Остальные страницы
location / {
limit_req_status 429;
limit_req zone=req_per_ip burst=30;
proxy_pass $proxyserver;
}
Почему это особенно важно для BitrixVM
- 1С-Битрикс и BitrixVM активно используют PHP и БД MySQL, что делает их уязвимыми к массовым запросам.
- Лимиты на уровне Nginx позволяют отсечь лишние обращения ещё до попадания в PHP, экономя ресурсы.
- Такой подход дополняет встроенные средства защиты Bitrix и внешние сервисы (Cloudflare, DDoS-Guard и др.).