Если тормозит BitrixVM: настройки nginx, PHP и MySQL
Какие параметры nginx, Apache, PHP и MySQL на виртуальной машине Битрикс помогают, когда сайт тормозит или зависает под нагрузкой, и какие старые советы сегодня вредны.
Актуальность. Набор настроек из заметки 2019 года проверен на актуальность. Параметры mbstring.func_overload и session.entropy_* удалены в PHP 8 — 1С-Битрикс сейчас требует mbstring.func_overload = 0. Очень короткие таймауты (5 секунд) оставлены как опция для защиты от зависших запросов, но они обрывают долгие операции: импорт из 1С, резервное копирование, агентов.
С чего начать
Сначала найдите причину: «Монитор производительности» в админке Битрикса покажет медленные компоненты и запросы, а в логах nginx и PHP-FPM видно, какие адреса отвечают дольше всего. Настройки сервера помогают, когда упираетесь в ресурсы, но не исправят тяжёлый код или отключённый кеш.
nginx: проксирование к Apache
proxy_connect_timeout 15;
proxy_send_timeout 15;
proxy_read_timeout 60; # импорт и бекапы — дольше 15 с
proxy_buffer_size 64k;
proxy_buffers 8 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 10m;
reset_timedout_connection on;
client_body_timeout 15;
send_timeout 15;
Буферы позволяют nginx быстро забрать ответ у Apache и освободить его процесс, пока медленный клиент скачивает страницу.
MySQL
wait_timeout = 60
Закрывает «висящие» соединения. Слишком маленькое значение (20 секунд) приводит к ошибкам «MySQL server has gone away» у долгих скриптов.
Apache (prefork)
<IfModule mpm_prefork_module>
MaxRequestWorkers 150
</IfModule>
Число процессов подбирайте по памяти: разделите свободную ОЗУ на средний размер процесса Apache. Значение 3000 из старых советов на обычном сервере исчерпает память и приведёт к зависанию.
PHP
display_errors = Off
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING
short_open_tag = On
allow_url_fopen = Off ; если модули не скачивают файлы по URL
max_input_vars = 10000
max_file_uploads = 100
max_execution_time = 60
post_max_size = 1024M
upload_max_filesize = 1024M
pcre.backtrack_limit = 1000000
pcre.recursion_limit = 14000
realpath_cache_size = 4096k
memory_limit = 256M
date.timezone = Europe/Moscow
mbstring.func_overload = 0
session.cookie_httponly = On
; OPcache — главное ускорение PHP
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 100000
opcache.validate_timestamps = 1
opcache.revalidate_freq = 0
Что ещё проверить в самом Битриксе
- Включено ли кеширование компонентов и управляемый кеш.
- Не выполняются ли агенты на хитах — переведите их на cron.
- Нет ли модулей, которые на каждой странице ходят во внешние сервисы.
- Проверку сайта в админке («Монитор производительности» → «Проверка конфигурации»).