Блог / Статьи

Полезная информация для вашего хостинга

Как подключить Brotli в Nginx и ускорить сайт: пошаговое руководство для администраторов

Как подключить Brotli в Nginx и ускорить сайт: пошаговое руководство для администраторов

Представьте себе: пользователь кликает на ссылку вашего сайта. Его палец едва коснулся экрана, а в его голове уже формируется ожидание — мгновенного, без задержек, без раздумий. Современный интернет — это не просто информация, это опыт. И этот опыт должен быть быстрым, плавным, почти магическим. Каждая секунда загрузки — это риск потерять посетителя. Каждый лишний килобайт — это задержка, раздражающий пиксель на экране прогресс-бара.

Оптимизация сайта — это не просто техническая задача. Это философия эффективности. Вы уже, вероятно, сжимали изображения, минифицировали CSS и JS, перешли на SSD-диски и CDN. Но есть один мощный, почти мистический инструмент, о котором многие до сих пор забывают — алгоритм сжатия Brotli, созданный гигантами Google для того, чтобы сделать веб-страницы легче, быстрее и умнее.

В этой статье мы не просто расскажем вам, как подключить Brotli к Nginx. Мы проведём вас через каждый этап, как через ритуал посвящения: от подготовки окружения до проверки работоспособности. Мы раскроем термины, объясним стратегии, покажем код, дадим примеры. Вы выйдете из этого текста не просто с настроенным сервером, а с глубоким пониманием, почему Brotli — это не опция, а необходимость в современном вебе.

Зачем человечеству Brotli: когда сжатие становится искусством

Brotli — это не просто ещё один алгоритм сжатия. Это эволюционный скачок после Gzip, разработанный командой Google специально для веб-контента. Если Gzip — это надёжный, проверенный временем грузовик, то Brotli — это спортивный электромобиль, созданный для городских пробок и высоких скоростей. Он использует словарь предопределённых фраз, оптимизированных именно под HTML, CSS, JavaScript и JSON — то есть под всё, что составляет современный сайт.

Технически, Brotli достигает лучшего коэффициента сжатия за счёт:

  • Контекстного моделирования — алгоритм "понимает", какой тип данных обрабатывает, и адаптирует стратегию сжатия.
  • Статического словаря — содержит более 13 000 часто встречающихся слов и фраз веб-контента, что позволяет заменять целые конструкции на короткие коды.
  • Адаптивного кодирования Хаффмана — динамически меняет длину кодов в зависимости от частоты символов.

На практике это даёт на 15–25% меньший размер файлов по сравнению с Gzip при том же или даже меньшем времени распаковки. Представьте: ваш минифицированный CSS-файл в 330 КБ сжимается Gzip до 60 КБ, а Brotli — до 55 КБ. Разница в 5 КБ? Кажется мелочью. Но если у вас на странице 20 таких файлов — это уже 100 КБ экономии. А если у вас 100 000 посетителей в день? Это 10 ГБ трафика, сэкономленного ежедневно. Это деньги. Это скорость. Это удовлетворённость пользователей.

И да — Brotli работает только по HTTPS. Но в 2025 году это не ограничение, а стандарт. Все современные браузеры (Chrome, Firefox, Safari, Edge) поддерживают Brotli и отправляют заголовок Accept-Encoding: br. Сервер, видя этот заголовок, отдаёт контент, сжатый Brotli. Если браузер не поддерживает — получает Gzip. Никаких ошибок, никаких падений. Только выгода.

И, как вишенка на торте: подключение Brotli часто даёт +30 пунктов в Google PageSpeed Insights буквально "из коробки". Без изменения кода, без оптимизации изображений — только за счёт более умного сжатия.

Почему Nginx не дружит с Brotli "из коробки" и как это исправить

Здесь начинается драма. Nginx — один из самых быстрых, надёжных и популярных веб-серверов в мире. Но, к удивлению многих, он не включает поддержку Brotli по умолчанию. Почему? Потому что Nginx ценит стабильность и минимализм. В его ядре — только то, что гарантированно работает везде и всегда. Brotli, хоть и эффективен, требует дополнительных библиотек и ресурсов, а значит — потенциальных точек отказа.

Но не отчаивайтесь. Сообщество разработчиков создало динамический модуль ngx_brotli, который можно подключить к уже работающему Nginx без полной пересборки сервера. Это как установить турбонаддув на ваш автомобиль, не снимая двигатель. Модуль компилируется отдельно, а затем подключается через директиву load_module. Это гибко, безопасно и обратимо.

Важно: модуль должен быть скомпилирован под ту же версию Nginx, что и ваш сервер. Иначе — ошибка загрузки, падение конфигурации, и ваш сайт может уйти в оффлайн. Поэтому первый шаг — узнать точную версию Nginx.

Подготовка боевого поля: окружение для сборки модуля

Прежде чем приступить к магии компиляции, нужно подготовить почву. Вам понадобится сервер с правами root или sudo, терминал и немного терпения. Мы будем работать на Ubuntu/Debian, но принципы одинаковы для CentOS, RHEL и других систем.

Шаг 1: Обновляем систему и устанавливаем инструменты разработки.


sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git wget libpcre3 libpcre3-dev zlib1g-dev libssl-dev

Разберём, зачем нужен каждый пакет:

  • build-essential — метапакет, включающий gcc, make, libc и другие инструменты для компиляции.
  • git — для клонирования репозитория модуля с GitHub.
  • wget — на случай, если понадобится скачать исходники Nginx.
  • libpcre3-dev — библиотеки для работы с регулярными выражениями (используются в Nginx).
  • zlib1g-dev — библиотеки сжатия, необходимы для совместимости с Gzip.
  • libssl-dev — криптографические библиотеки, обязательны для HTTPS и современных сборок.

Шаг 2: Узнаём версию Nginx.


nginx -v

Вы увидите что-то вроде: nginx version: nginx/1.20.1. Запомните эту версию. Именно под неё мы будем собирать модуль.

Шаг 3 (опционально): Если у вас нет исходников Nginx, скачайте их. Например:


cd /tmp
wget http://nginx.org/download/nginx-1.20.1.tar.gz
tar -xzf nginx-1.20.1.tar.gz

Если вы устанавливали Nginx через пакетный менеджер, исходники могут отсутствовать — их нужно скачать вручную с официального сайта.

brotli04

Сборка и установка: ритуал компиляции модуля Brotli

Теперь начинается самое интересное — сборка модуля. Мы будем использовать официальный репозиторий от Google.

Шаг 1: Клонируем репозиторий ngx_brotli.


cd /tmp
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli

Шаг 2: Инициализируем подмодули. Важно! Без этого шага модуль не соберётся, так как основная библиотека Brotli находится в подмодуле.


git submodule update --init
cd ..

Шаг 3: Переходим в директорию с исходниками Nginx (например, /tmp/nginx-1.20.1) и запускаем конфигурацию сборки.


cd nginx-1.20.1
./configure --with-compat --add-dynamic-module=../ngx_brotli

Что делают эти флаги?

  • --with-compat — обеспечивает совместимость модуля с разными версиями Nginx, снижает риск ошибок при обновлении.
  • --add-dynamic-module=../ngx_brotli — указывает путь к модулю, который нужно скомпилировать как динамический (не статический).

Если команда завершилась без ошибок — отлично. Переходим к компиляции.

make modules

После успешной сборки в директории objs/ появятся два файла:

  • ngx_http_brotli_filter_module.so — модуль для динамического сжатия "на лету".
  • ngx_http_brotli_static_module.so — модуль для отдачи заранее сжатых файлов с расширением .br.

Шаг 4: Копируем модули в системную директорию Nginx.


sudo mkdir -p /etc/nginx/modules
sudo cp objs/ngx_http_brotli_filter_module.so /etc/nginx/modules/
sudo cp objs/ngx_http_brotli_static_module.so /etc/nginx/modules/
sudo chmod 644 /etc/nginx/modules/ngx_http_brotli_*.so

Права 644 означают: владелец может читать и писать, группа и остальные — только читать. Этого достаточно для работы модулей.

Активация модуля: как вдохнуть жизнь в конфигурацию Nginx

Модули скомпилированы и установлены — теперь нужно сказать Nginx, чтобы он их загрузил. Для этого редактируем главный конфигурационный файл.

Открываем /etc/nginx/nginx.conf:


sudo nano /etc/nginx/nginx.conf

В самом начале файла, до блока http {, добавляем:


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

Сохраняем файл и проверяем синтаксис:


sudo nginx -t

Если вы видите nginx: configuration file /etc/nginx/nginx.conf test is successful — поздравляем, модули загружены корректно.

Важно! На некоторых системах (особенно Ubuntu с пакетной установкой Nginx) модули подключаются через файлы в /etc/nginx/modules-enabled/. В этом случае лучше создать отдельный файл, например:


sudo nano /etc/nginx/modules-enabled/50-mod-brotli.conf

И вставить туда те же строки load_module. Это предотвратит конфликты при обновлении пакетов.

Настройка сжатия: искусство баланса между скоростью и размером

Теперь, когда модули активны, настраиваем само сжатие. Все директивы Brotli добавляются внутри блока http { в nginx.conf или в конфигурации виртуального хоста.

Пример базовой конфигурации:


http {
    ...

    # Включаем Brotli
    brotli on;
    brotli_static on;
    brotli_comp_level 6;
    brotli_types text/plain text/css text/javascript application/javascript application/json application/xml application/xhtml+xml font/ttf font/otf font/woff font/woff2;
    brotli_buffers 16 8k;
    brotli_min_length 20;

    ...
}

Разберём каждую директиву подробно:

  • brotli on; — включает динамическое сжатие ответов сервера. Если клиент поддерживает Brotli — получит сжатый контент.
  • brotli_static on; — если рядом с файлом style.css лежит style.css.br, Nginx отдаст его сразу, без сжатия "на лету". Это экономит CPU.
  • brotli_comp_level 6; — уровень сжатия от 1 до 11. Уровень 1 — быстро, но слабо сжимает. Уровень 11 — медленно, но максимально сжимает. Уровень 6 — золотая середина: хорошее сжатие без заметной нагрузки на процессор.
  • brotli_types ...; — MIME-типы, которые нужно сжимать. Обязательно включайте текстовые форматы. Не включайте бинарные (jpeg, png, gif, mp4) — они уже сжаты.
  • brotli_buffers 16 8k; — количество и размер буферов для сжатия. По умолчанию 4 4k — может быть мало для больших файлов. 16 8k — безопасный выбор.
  • brotli_min_length 20; — минимальный размер ответа для сжатия (в байтах). Мелкие файлы не стоит сжимать — накладные расходы превысят выгоду.

Не отключайте Gzip! Оставьте его включённым. Nginx автоматически выберет лучший алгоритм в зависимости от заголовка Accept-Encoding клиента. Пример конфигурации Gzip для совместимости:


gzip on;
gzip_vary on;
gzip_min_length 20;
gzip_proxied any;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6;

После внесения изменений перезагружаем Nginx:


sudo systemctl reload nginx
# или
sudo nginx -s reload

brotli03

Проверка работоспособности: убедимся, что магия работает

Настройка завершена — теперь нужно убедиться, что Brotli действительно работает. Есть несколько способов.

Способ 1: Через curl


curl -I -H "Accept-Encoding: br" https://ваш-сайт.ру

В ответе ищем:


Content-Encoding: br
Vary: Accept-Encoding

Если есть Content-Encoding: br — победа! Сервер отдаёт Brotli-сжатый контент.

Способ 2: Через браузер (Chrome DevTools)

  1. Откройте сайт в Chrome.
  2. Нажмите F12 → вкладка Network.
  3. Обновите страницу.
  4. Выберите любой CSS или JS файл.
  5. Во вкладке Headers найдите Response Headers → Content-Encoding.
  6. Если там br — Brotli работает.

Способ 3: Через онлайн-инструменты

  • Brotli Test от KeyCDN
  • Brotli Test от Gift of Speed

Также можно проверить PageSpeed Insights — вы должны увидеть значительный рост показателей производительности.

Эпилог: когда скорость становится вашим конкурентным преимуществом

Вы прошли весь путь. От подготовки окружения до проверки работоспособности. Вы не просто установили модуль — вы переосмыслили подход к производительности. Brotli — это не просто техническая оптимизация. Это инвестиция в пользовательский опыт, в лояльность, в конверсию, в SEO.

Google давно использует скорость загрузки как фактор ранжирования. Чем быстрее ваш сайт — тем выше он в поиске. Чем быстрее страница — тем меньше отказов, больше просмотров, выше доход. Brotli — это один из самых эффективных способов "похудеть" вашему сайту без изменения контента.

И помните: технологии меняются, но принципы остаются. Лёгкость — это красота. Скорость — это уважение к пользователю. Подключив Brotli, вы не просто ускорили сайт. Вы сделали его человечнее.

Дальнейшие шаги:

  • Настройте предварительное сжатие статики — создавайте .br-файлы при деплое, чтобы снять нагрузку с CPU.
  • Мониторьте нагрузку на сервер — при высоком трафике можно понизить brotli_comp_level до 4-5.
  • Добавьте Brotli в CDN — если используете Cloudflare, Fastly или подобные, активируйте Brotli там тоже.

Пусть ваш сайт летает. Пусть пользователи улыбаются, когда страница загружается раньше, чем они успевают моргнуть. Это и есть магия веба — и вы только что стали её творцом.