Налаштування 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 день.







