Установка и настройка gzip и Brotli на Ubuntu и Debian Print

  • brotli, gzip, nginx, apache2
  • 0

Сжатие на стороне веб-сервера ускоряет доставку HTML, CSS и JS, экономит трафик и улучшает показатели Core Web Vitals. Практическое правило простое: включаем gzip как базовую совместимость и добавляем Brotli там, где его понимает браузер. Сервер сам отдаст Brotli клиентам с поддержкой, остальным вернет gzip.

Краткий план:

 - Включаем оба алгоритма.

 - Отдаем Brotli с приоритетом, если клиент его просит.

 - Не сжимаем уже сжатые форматы.

 - Ставим заголовок Vary: Accept-Encoding, чтобы кэши не путали варианты.

 - Проверяем через curl заголовок Content-Encoding.

Что сжимать, а что нет

 - Сжимать: text/html, text/css, application/javascript, application/json, application/xml, image/svg+xml, application/manifest+json.

 - Не сжимать: jpg, png, webp, avif, gif, mp4, mkv, zip, gz, br, 7z, rar, woff2.

 - Допустимо сжимать ttf, otf и woff, но выигрыш небольшой.

 

Подключение Brotli к Nginx | Ubuntu и Debian

1. Установка модулей Brotli и утилит

На актуальных Ubuntu и Debian модули Brotli для Nginx доступны как пакеты динамических модулей. Устанавливаем фильтр и статический модуль, а также CLI-утилиту для предсжатия статики:

sudo apt update

sudo apt install -y libnginx-mod-http-brotli-filter libnginx-mod-http-brotli-static brotli

 

*Пакеты libnginx-mod-http-brotli-* имеются в официальных репозиториях Ubuntu 22.04/24.04 и Debian 12+, устанавливаются как динамические модули Nginx. 

Проверьте, что в /etc/nginx/nginx.conf подключена строка для динамических модулей:

 

include /etc/nginx/modules-enabled/*.conf;

Если ее нет, добавьте и перезапустите Nginx.

 

2. Включение gzip и Brotli в конфигурации

Откройте главный конфиг /etc/nginx/nginx.conf или файл в conf.d и добавьте в блок http:

# Gzip

gzip on;

gzip_comp_level 6;

gzip_min_length 256;

gzip_vary on;

gzip_proxied any;

gzip_disable "msie6";

gzip_types

  text/plain

  text/css

  text/javascript

  application/javascript

  application/json

  application/xml

  application/rss+xml

  application/atom+xml

  application/manifest+json

  image/svg+xml;

# Brotli (нужен установленный модуль)

brotli on;

brotli_comp_level 6;

brotli_min_length 256;

brotli_static on;

brotli_types

  text/plain

  text/css

  text/javascript

  application/javascript

  application/json

  application/xml

  application/rss+xml

  application/atom+xml

  application/manifest+json

  image/svg+xml;

 

* Директивы brotli и brotli_static относятся к модулям фильтра и статического Brotli соответственно. Можно держать brotli off; и при этом оставить brotli_static on;, если используете только предсжатые .br файлы.

 

Применяем конфиг:

sudo nginx -t && sudo systemctl reload nginx

 

3. Предсжатие статики (.gz и .br)

Рекомендуется предсжимать статические файлы на этапе сборки, чтобы не грузить CPU в рантайме:

# Gzip предсжатие

find /var/www/site -type f -regextype posix-extended -regex '.*\.(html|css|js|json|xml|svg)$' -exec gzip -k -f -9 {} \;

# Brotli предсжатие

find /var/www/site -type f -regextype posix-extended -regex '.*\.(html|css|js|json|xml|svg)$' -exec brotli -f -Z {} \;

И убедитесь, что включены:

gzip_static on;

brotli_static on;

 

4. Проверка сжатия

curl -I -H 'Accept-Encoding: br'  https://ваш-домен/путь/к/файлу.css | grep -i content-encoding

curl -I -H 'Accept-Encoding: gzip' https://ваш-домен/ | grep -i content-encoding

Должно вернуться Content-Encoding: br для первого и gzip для второго.

 

5. Частые ошибки и решения

 - Нет заголовка Content-Encoding

Проверьте, не попали ли правила внутрь неправильного server или location. Убедитесь, что тип контента входит в *_types.

 - Браузер получает .br, но рендер ломается

Убедитесь, что .br создан из исходного файла, а не повторно сжат из .gz. Включайте только gzip_static on; brotli_static on; и держите оригиналы рядом.

 - Высокая нагрузка CPU

Уменьшите *_comp_level до 4–5 и включите предсжатие для тяжелых файлов.

 - Nginx не стартует после установки модулей

Проверьте, что в конфиге подключены modules-enabled/*.conf и нет дублирующих load_module.  

 

Brotli подключение на Apache | Ubuntu и Debian

1. Включение модулей

Активируем gzip через mod_deflate, Brotli через mod_brotli, а также headers и filter:

sudo a2enmod deflate brotli headers filter

sudo systemctl reload apache2

 - mod_brotli официальный для Apache 2.4, доступен в сборках Debian/Ubuntu и использует библиотеку Google Brotli. 

 

2. Конфигурация сжатия

Создайте файл /etc/apache2/conf-available/compression.conf:

 

# Включаем gzip

AddOutputFilterByType DEFLATE \

  text/plain text/html text/css text/javascript application/javascript \

  application/json application/xml image/svg+xml application/manifest+json

# Включаем Brotli

AddOutputFilterByType BROTLI_COMPRESS \

  text/plain text/html text/css text/javascript application/javascript \

  application/json application/xml image/svg+xml application/manifest+json

# Качество Brotli

BrotliCompressionQuality 6

BrotliWindowSize 22

# Не сжимаем уже сжатые форматы

SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png|webp|avif|mp4|mkv|zip|gz|br|7z|rar|woff2)$" no-compress

SetEnvIfNoCase no-compress 1 no-gzip

SetEnvIfNoCase no-compress 1 no-brotli

# Правильный кэш-вариант

Header append Vary "Accept-Encoding"

 

Активируйте и примените:

sudo a2enconf compression

sudo apachectl configtest && sudo systemctl reload apache2

 

3. Проверка

curl -I -H 'Accept-Encoding: br'  https://ваш-домен/ | grep -i content-encoding

curl -I -H 'Accept-Encoding: gzip' https://ваш-домен/ | grep -i content-encoding

 

Частые ошибки и решения

 - BROTLI_COMPRESS не работает:

Убедитесь, что модуль включен: apache2ctl -M | grep brotli. Если нет, повторите a2enmod brotli.  

 - Конфликт с кэшем:

Добавьте Header append Vary "Accept-Encoding", чтобы CDN и браузеры различали варианты.

 - Файл уже сжат:

Проверьте исключения через SetEnvIfNoCase, чтобы не сжимать *.br, *.gz, *.woff2.

 - Когда лучше предсжимать файлы, а не сжимать «на лету»:

 - Статика большого размера и высокого трафика лучше отдается из предсжатых .gz и .br. Это разгружает CPU и дает максимальное качество сжатия.

 - Динамические ответы (HTML от приложения) логично сжимать на лету.

 

Диагностика и контрольные команды

 - Проверить поддержку типов в Nginx

Убедитесь, что нужный MIME указывает *_types.

 - Проверить, что Brotli модуль загружен в Nginx

nginx -V 2>&1 | grep -i brotli или проверьте наличие файлов в /etc/nginx/modules-enabled/ после установки пакетов.  

 - Тест производительности локально

curl -s -H 'Accept-Encoding: br' -w '%{size_download}\n' -o /dev/null https://ваш-домен/файл.css

 

Полезные параметры по умолчанию

 - Уровень компрессии 6 дает хороший баланс скорости и размера. Для нагруженных систем начните с 4–5.

 - Минимальная длина 256 байт избавляет от бессмысленного сжатия крошечных ответов.

 - Список типов должен покрывать HTML, CSS, JS, JSON, XML и SVG.

 

Удаление или откат настроек

 - Отключить Brotli в Nginx

Замените brotli on; на brotli off; и перезагрузите, оставив brotli_static on; если используете предсжатие.

 - Отключить Brotli в Apache

sudo a2dismod brotli && sudo systemctl reload apache2

 - Полное удаление модулей Brotli Nginx

sudo apt remove -y libnginx-mod-http-brotli-filter libnginx-mod-http-brotli-static


Was this answer helpful?

Related Articles

Как использовать свои подсети /24 на серверах Hetzner. Использование на Windows Server   Hetzner выдаёт только один белый IP. Хочется RDP на несколько ВМ, собственный почтовый пул или... Какие есть боты/сервисы, которые стоит добавить в исключения? Практический гайд для защиты сайта и бизнеса В современных условиях кибербезопасности настройка блокировок и фильтров — обязательная мера для... Какие есть боты/сервисы, которые стоит добавить в исключения? Практический гайд для защиты сайта и бизнеса В современных условиях кибербезопасности настройка блокировок и фильтров — обязательная мера для... Что делать, если сертификаты Let’s Encrypt не обновляются? Простое решение за 5 минут Сертификаты от Let’s Encrypt стали стандартом для бесплатной автоматической защиты сайтов по... Какие сервисы и решения реально помогают? Топ-10 инструментов Почему взламывают сайты и что самое опасное? Современный сайт на WordPress, Битрикс, Joomla,...
« Back

Powered by WHMCompleteSolution


Knowledgebase