Налаштування Gzip стиснення для 1С-Бітрікс
Налаштування Gzip стиснення для 1С-Бітрікс
Gzip — перше, що перевіряє аудитор PageSpeed після встановлення Бітрікс на новий сервер. Дивно часто він не налаштований взагалі або налаштований неправильно: стискається HTML, але не JS і CSS, або compression level виставлений на максимум і пожирає CPU без відчутної користі. Типовий HTML сторінки каталогу — 80–200 КБ, після Gzip 6 — 15–35 КБ. Економія 75–80% трафіку на кожен некешований HTML-запит.
Конфігурація nginx
Стандартна установка Бітрікс через setup.sh налаштовує базовий Gzip, але часто пропускає важливі MIME-типи та не вмикає gzip_vary.
Повна конфігурація в блоці http або server:
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 1024;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/xml+rss
application/rss+xml
application/atom+xml
image/svg+xml
font/ttf
font/otf
application/vnd.ms-fontobject;
gzip_vary on — критично важливий при наявності CDN або проксі. Додає заголовок Vary: Accept-Encoding, щоб кеші не віддавали стиснутий контент браузерам без підтримки Gzip.
gzip_min_length 1024 — не стискаємо файли менше 1 КБ. Overhead Gzip-заголовків та CPU-витрати не виправдані для малих відповідей.
gzip_comp_level 6 — рівні 7–9 дають менше 2% додаткового стиснення при 2–3x зростанні CPU. Рівень 1–2 швидкий, але стискає на 15–20% гірше.
Типові помилки конфігурації Бітрікс
Подвійне стиснення через PHP і nginx. Бітрікс вміє стискати відповідь через PHP (ob_gzhandler). Якщо ввімкнено і в PHP, і в nginx — браузер отримує двічі стиснутий контент і не може його розпакувати.
Перевіряємо в /etc/php/*/fpm/php.ini або bitrix/php_interface/dbconn.php:
; Має бути вимкнено якщо nginx робить gzip
zlib.output_compression = Off
І в налаштуваннях Бітрікс: Налаштування → Налаштування продукту → Стиснення сторінок — вимкнути, якщо стиснення робить nginx.
Відсутність gzip_proxied any — якщо сайт за балансувальником або CDN, nginx без цієї директиви не стискає відповіді для проксійованих запитів (заголовок Via присутній).
application/json не у списку. Відповіді API Бітрікс (компоненти, що працюють у режимі AJAX) повертають JSON. Без стиснення JSON-відповіді каталогу з 50 товарів важать 40–80 КБ, зі стисненням — 8–15 КБ.
Конфігурація Apache
Для серверів Бітрікс на Apache (bitrix-env використовує nginx як фронтенд, але на shared-хостингах часто чистий Apache):
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilterByType DEFLATE text/css application/javascript
AddOutputFilterByType DEFLATE application/json application/xml
AddOutputFilterByType DEFLATE image/svg+xml font/ttf
DeflateCompressionLevel 6
# Не стискати вже стиснуті формати
SetEnvIfNoCase Request_URI \.(?:gif|jpg|jpeg|png|zip|gz|br)$ no-gzip dont-vary
Header append Vary Accept-Encoding
</IfModule>
Статичний pre-gzip для ресурсів Бітрікс
nginx може віддавати заздалегідь стиснуті файли через директиву gzip_static on:
gzip_static on;
При запиті app.js nginx шукає app.js.gz. Якщо знайдено — віддає без витрат CPU на компресію. Генерація .gz-файлів у деплой-скрипті:
find /var/www/site/public/build -name "*.js" -o -name "*.css" | \
xargs -P4 -I{} gzip -k -6 {}
Перевірка
# Перевіряємо стиснення відповіді
curl -sI -H "Accept-Encoding: gzip" https://site.ru/ | grep -i content-encoding
# Content-Encoding: gzip
# Порівнюємо розміри
curl -s --compressed https://site.ru/ | wc -c
curl -s -H "Accept-Encoding: identity" https://site.ru/ | wc -c
Інструмент Check GZIP compression показує стиснення для будь-якого URL разом з економією в байтах.







