Гид по технологиям

Как включить Brotli в Nginx на Debian 10

• 4 min read • DevOps • Обновлено 26 Nov 2025
Brotli в Nginx на Debian 10 — инструкция
Brotli в Nginx на Debian 10 — инструкция

Логотип Brotli

Важно: пример использует пользователя “johndoe” и домен “example.com” — замените их на свои значения.

Что такое Brotli

Brotli — это универсальный безпотерянный алгоритм сжатия, разработанный Google. Он сочетает вариант LZ77, кодирование Хаффмана и контекстное моделирование 2-го порядка. Brotli обеспечивает плотное сжатие, сопоставимое с лучшими общими методами, и по скорости близок к deflate. Код открыт под лицензией MIT.

Краткое определение: Brotli — эффективное HTTP‑сжатие контента, которое уменьшает объём передаваемых данных и ускоряет загрузку страниц.

Требования

  • Сервер с Debian 10 (buster)
  • Nginx версии 1.11.5 или новее
  • Домен с записями A / AAAA
  • Действующий TLS‑сертификат

Начальные шаги

Проверьте версию Debian:

lsb_release -ds
# Debian GNU/Linux 10 (buster)

Настройте часовой пояс:

sudo dpkg-reconfigure tzdata

Обновите пакеты операционной системы:

sudo apt update && sudo apt upgrade -y

Установите набор утилит для администрирования:

sudo apt install -y curl wget vim git unzip socat bash-completion apt-transport-https

Шаг 1 — Установите Acme.sh и получите TLS‑сертификат от Let’s Encrypt

Brotli требует HTTPS. В этом разделе мы получим сертификат, используя acme.sh.

Скачайте и установите Acme.sh:

sudo mkdir /etc/letsencrypt
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail [email protected]
cd ~
source ~/.bashrc

Проверьте версию:

acme.sh --version
# v2.8.2

Получите RSA и ECDSA сертификаты для example.com:

# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [email protected] --ocsp-must-staple --keylength 2048
# ECDSA/ECC P-256
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [email protected] --ocsp-must-staple --keylength ec-256

После выполнения сертификаты будут в:

  • RSA: /etc/letsencrypt/example.com
  • ECC/ECDSA: /etc/letsencrypt/example.com_ecc

Замечание: удостоверьтесь, что порт 80 доступен для standalone режима acme.sh.

Шаг 2 — Установите Nginx из официального репозитория

Скачайте и установите mainline‑ветку Nginx из официального репозитория:

wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
sudo -s printf "deb https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
exit
sudo apt update
sudo apt install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt

Проверьте версию Nginx:

sudo nginx -v
# nginx version: nginx/1.17.4

Включите и запустите службу:

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

Важно: версия установленного Nginx должна совпадать с версией исходников, которые вы будете скачивать далее.

Шаг 3 — Скачайте и соберите исходный код Brotli (ngx_brotli)

Мы соберём ngx_brotli как динамический модуль. Скачайте исходники той же версии Nginx, что и установленная на сервере:

wget https://nginx.org/download/nginx-1.17.4.tar.gz && tar zxvf nginx-1.17.4.tar.gz

Удалите архив:

rm nginx-1.17.4.tar.gz

Клонируйте ngx_brotli и инициализируйте субмодули:

git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli && git submodule update --init && cd ~

Перейдите в папку с исходниками Nginx:

cd ~/nginx-1.17.4

Установите зависимости для сборки:

sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev

Соберите динамический модуль ngx_brotli и скопируйте его в стандартный каталог модулей /etc/nginx/modules:

./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
sudo cp objs/*.so /etc/nginx/modules

Проверьте, что появились файлы ngx_http_brotli_filter_module.so и ngx_http_brotli_static_module.so:

ls /etc/nginx/modules

Установите права 644 для .so файлов:

sudo chmod 644 /etc/nginx/modules/*.so

Примечание: сборка как “dynamic module” позволяет не пересобирать весь Nginx.

Шаг 4 — Настройте Nginx для использования Brotli

Загрузите модули в начале /etc/nginx/nginx.conf, добавив следующие строки:

load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;

Проверьте корректность конфигурации:

sudo nginx -t

Создайте корневую директорию сайта и простой index.html:

sudo mkdir -p /var/www/example.com
sudo -s
echo "Hello from example.com" >> /var/www/example.com/index.html
exit

Создайте виртуальный хост /etc/nginx/conf.d/example.com.conf и поместите туда следующую конфигурацию:

server {
  listen 80;
  server_name example.com; # Replace with your domain name
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 ssl http2;
  server_name example.com; # Replace with your domain name

  root /var/www/example.com; # Replace with your document root

  # RSA
  ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
  # ECDSA
  ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;

  brotli on;
  brotli_static on;
  brotli_types text/plain text/css text/javascript application/javascript text/xml application/xml image/svg+xml application/json;
}

Проверьте ещё раз:

sudo nginx -t

Перезагрузите Nginx:

sudo systemctl reload nginx.service

Откройте сайт в браузере и в инструментах разработчика во вкладке Network проверьте ответ: заголовок Content-Encoding: br означает, что сжатие Brotli работает.

Пример заголовка ответа с Content-Encoding: br в инструментах разработчика

Когда Brotli не подходит

  • Клиенты старых браузеров: некоторые очень старые браузеры не поддерживают Brotli; при этом Nginx обычно выбирает gzip как запасной вариант.
  • Малые по размеру ответы: для очень маленьких файлов накладные расходы могут перекрывать выгоду от сжатия.
  • Ресурсы CPU: сжатие на высоких уровнях (максимальное качество) увеличивает нагрузку на CPU.

Альтернативные подходы

  • gzip (встроен в Nginx) — хорошо поддерживается и быстрее при низкой нагрузке.
  • zstd — современная альтернатива с хорошим компромиссом скорость/сжатие, но требует сторонних модулей.
  • Сжатие на стороне сборки/CI (например, precompressed static .br файлы) — уменьшает нагрузку в рантайме.

Мини‑методология установки (шпаргалка)

  1. Подготовить сервер: обновить пакеты и открыть порт 80/443.
  2. Получить TLS (acme.sh или certbot).
  3. Установить Nginx нужной версии из репозитория.
  4. Скачать исходники той же версии Nginx и ngx_brotli.
  5. Собрать динамический модуль и поместить .so в /etc/nginx/modules.
  6. Подключить модули в nginx.conf и включить brotli в виртуальных хостах.
  7. Тестировать nginx -t и проверить заголовки ответа.

Критерии приёмки

  • nginx -t не возвращает ошибок.
  • Модуль ngx_http_brotli_filter_module.so присутствует в /etc/nginx/modules и имеет права 644.
  • При обращении к защищённому сайту в ответе появляется заголовок Content-Encoding: br для поддерживающих клиентов.
  • Доступность сайта по HTTPS и корректная цепочка сертификатов.

Чек‑лист для ролей

  • Администратор сервера:
    • Обновил систему и установил зависимости.
    • Собрал модуль и настроил права.
  • DevOps/инженер безопасности:
    • Получил TLS и проверил конфигурацию SSL.
    • Убедился, что политики HTTP/2 и редиректы настроены.
  • Владелец продукта:
    • Проверил рендеринг страниц в целевых браузерах.
    • Оценил влияние на время загрузки и CPU.

Краткий глоссарий

  • LZ77 — алгоритм на основе поиска повторяющихся фрагментов.
  • Huffman coding — метод энтропийного кодирования.
  • brotli_static — директива Nginx, отдаёт предсжатые .br файлы, если они существуют.

Итог

Brotli даёт заметное сжатие статических и текстовых ресурсов, улучшая скорость загрузки сайтов. На Debian 10 процесс включает получение TLS, установку Nginx, компиляцию ngx_brotli как динамического модуля и внесение простых изменений в конфигурацию. Проверьте поведение на клиентских устройствах и настройте уровни компрессии в зависимости от допустимой нагрузки на CPU.

Ссылки

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро