Настройка Brotli сжатия для 1С-Битрикс
Настройка Brotli сжатия для 1С-Битрикс
Gzip на уровне 6 сжимает типичный HTML страницы каталога с 180 КБ до 32 КБ. Brotli на уровне 11 даёт 27–28 КБ при той же нагрузке на CPU — 15–20% выигрыш без изменений в коде сайта. Для CSS и JS разница ещё заметнее: бандл 400 КБ после Gzip — 110 КБ, после Brotli — 90–95 КБ. На медленных мобильных соединениях это ощутимо.
Все современные браузеры поддерживают Brotli (br в заголовке Accept-Encoding). Brotli требует HTTPS — по спецификации он работает только по защищённому соединению.
Установка модуля Brotli для nginx
Nginx не поддерживает Brotli из коробки — нужен модуль ngx_brotli. Два пути:
Компиляция из исходников:
# Клонируем модуль
cd /usr/local/src
git clone --recurse-submodules https://github.com/google/ngx_brotli.git
# Узнаём версию nginx
nginx -v
# Скачиваем исходники той же версии
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0
# Конфигурируем с модулем
./configure --with-compat --add-dynamic-module=/usr/local/src/ngx_brotli
# Собираем только модули
make modules
# Копируем .so в директорию модулей nginx
cp objs/ngx_http_brotli_filter_module.so /etc/nginx/modules/
cp objs/ngx_http_brotli_static_module.so /etc/nginx/modules/
Готовый пакет (Debian/Ubuntu):
add-apt-repository ppa:ondrej/nginx
apt update
apt install libnginx-mod-http-brotli
Конфигурация nginx для Битрикс
# /etc/nginx/nginx.conf — в блоке http
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
http {
# Brotli динамическое сжатие
brotli on;
brotli_comp_level 6;
brotli_types
text/html
text/css
text/javascript
application/javascript
application/json
application/xml
text/xml
image/svg+xml
font/woff2;
# Статические pre-compressed файлы
brotli_static on;
# Gzip как fallback для браузеров без Brotli
gzip on;
gzip_comp_level 6;
gzip_types text/html text/css application/javascript;
gzip_vary on;
}
brotli_comp_level 6 — баланс между степенью сжатия и нагрузкой на CPU. Уровень 11 даёт +5–8% сжатия ценой 10x роста времени компрессии — оправдан только для pre-compressed статики.
brotli_static on — nginx ищет файл assets/app.js.br рядом с assets/app.js. Если найден, отдаёт готовый архив без затрат CPU.
Pre-compressed файлы для статики Битрикс
Для CSS/JS бандлов, которые редко меняются, готовим .br-файлы заранее:
# Устанавливаем brotli CLI
apt install brotli
# Сжимаем все JS и CSS в директории public
find /var/www/bitrix/public -name "*.js" -o -name "*.css" | while read f; do
brotli --best --keep "$f"
done
Добавляем в деплой-скрипт: после сборки фронтенда автоматически генерируем .br-файлы.
Проверка работы
curl -sI -H "Accept-Encoding: br" https://site.ru/bitrix/js/main/core/core.js | grep -i content-encoding
# Ожидаемый ответ: Content-Encoding: br
# Сравниваем размеры
curl -s -H "Accept-Encoding: identity" https://site.ru/css/app.css | wc -c
curl -s -H "Accept-Encoding: br" https://site.ru/css/app.css | wc -c
Apache mod_brotli
Если Битрикс работает на Apache без nginx-фронтенда:
LoadModule brotli_module modules/mod_brotli.so
<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS text/html text/css application/javascript
BrotliCompressionLevel 6
</IfModule>
mod_brotli входит в Apache 2.4.26+. На старых серверах Битрикс-окружения (Apache 2.2) Brotli недоступен — нужен апгрейд или переход на nginx.







