Налаштування gzip-стиснення для 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування gzip-стиснення для 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування 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 разом з економією в байтах.