Настройка 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 вместе с экономией в байтах.







