Настройка gzip-сжатия для 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка gzip-сжатия для 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

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