Если тормозит 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.
  • Нет ли модулей, которые на каждой странице ходят во внешние сервисы.
  • Проверку сайта в админке («Монитор производительности» → «Проверка конфигурации»).

Все статьи

Расскажите о задаче — подберём платформу и оценим работу

Обсудить проект