Настройка Nginx для 1С-Битрикс
По умолчанию Nginx после установки не знает о структуре Битрикс: не настроен try_files для красивых URL, не закрыты служебные директории, не выставлены заголовки кэширования статики. Типичный результат — 404 на URL без расширения или открытый доступ к /bitrix/backup/.
Структура конфигурации под Битрикс
Официальные конфиги для Nginx + PHP-FPM доступны в репозитории Битрикс, но их часто используют без понимания. Ключевые блоки:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/bitrix;
index index.php;
charset utf-8;
client_max_body_size 100m;
# Красивые URL Битрикс (ЧПУ)
location / {
try_files $uri $uri/ /bitrix/urlrewrite.php$is_args$args;
}
# Прямой вызов urlrewrite
location = /bitrix/urlrewrite.php {
fastcgi_pass php-fpm;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# PHP через FPM
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass php-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 120;
}
}
Закрытие служебных директорий
Обязательные правила безопасности для Битрикс:
# Запрет доступа к служебным директориям
location ~* ^/bitrix/(backup|modules|php_interface|tools)/ {
deny all;
return 403;
}
# Запрет к .htaccess и скрытым файлам
location ~ /\. {
deny all;
return 404;
}
# Закрыть upload от PHP-выполнения
location ~* ^/upload/.*\.php$ {
deny all;
return 403;
}
Директория /upload должна отдавать файлы, но не выполнять PHP — вектор для загрузки веб-шеллов.
Кэширование статики
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
immutable говорит браузеру: файл не изменится до истечения expires. Работает для версионированных файлов Битрикс (/bitrix/cache/css/[hash].css).
gzip-сжатие
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 5;
gzip_types
text/plain text/css application/json
application/javascript text/xml application/xml
image/svg+xml;
gzip_comp_level 5 — баланс CPU/сжатие. Уровни 7–9 дают минимальный прирост при ощутимом росте нагрузки на CPU.
Composite (HTML-кэш Битрикс) и Nginx
Битрикс Composite сохраняет HTML в /bitrix/html_pages/. Nginx может отдавать эти файлы без PHP:
location / {
# Проверяем наличие закэшированной HTML-страницы
set $cache_path "/bitrix/html_pages${uri}";
if (-f "${document_root}${cache_path}.html") {
rewrite ^ ${cache_path}.html last;
}
try_files $uri $uri/ /bitrix/urlrewrite.php$is_args$args;
}
location ~* /bitrix/html_pages/ {
internal;
add_header X-Bitrix-Composite "HIT";
}
Статические страницы из HTML-кэша отдаются Nginx без запуска PHP-FPM — ускорение в 10–50 раз для незалогиненных посетителей.
Кейс: неправильный try_files
Интернет-магазин после смены сервера: все страницы каталога давали 404, главная работала. Причина: в конфиге стояло try_files $uri $uri/ @bitrix; с именованным location @bitrix, который был прописан неверно и не передавал $args. Результат: URL /catalog/electronics/?SECTION_ID=5 терял параметры. После исправления на стандартный try_files $uri $uri/ /bitrix/urlrewrite.php$is_args$args всё заработало.
Срок настройки Nginx под Битрикс с нуля: 0,5–1 день.







