brotli

Тема дорожной карты · Nginx

Brotli — современный алгоритм сжатия без потерь, разработанный Google, который, как правило, обеспечивает на 20–26% лучшее сжатие веб-ресурсов по сравнению с gzip, сокращая трафик и улучшая скорость загрузки страниц. В Nginx сжатие Brotli доступно через динамический модуль ngx_brotli, добавляющий директиву brotli on; и brotli_comp_level (1–11) в конфигурацию сервера в /etc/nginx/nginx.conf или внутри отдельных блоков server. Поскольку Brotli требует наличия Accept-Encoding: br от клиента, Nginx автоматически согласовывает кодирование и переключается на gzip для браузеров, которые его не поддерживают, — это делает Brotli безопасным дополнением к gzip on;. Директива brotli_static on; указывает Nginx отдавать предварительно сжатые файлы .br для статических ресурсов, устраняя нагрузку на CPU при сжатии на лету на нагруженном веб-сервере или обратном прокси. Включение Brotli с подходящим уровнем сжатия — одна из наиболее эффективных мер оптимизации производительности Nginx для контентно-насыщенных сайтов.

Как это работает

brotli использует gzip (универсальный) или brotli (лучше степень сжатия, современные клиенты). gzip on; gzip_types text/plain text/css application/javascript application/json; gzip_comp_level 5; gzip_min_length 1024;. Pre-compress статики на build-time + раздача через gzip_static on / brotli_static on (без per-request CPU). HTTP/2 + gzip + разумные cache-заголовки — современный baseline. Brotli требует модуль ngx_brotli (нет в stock nginx).

Когда применять

Всегда gzip для текстового контента (HTML, CSS, JS, JSON, XML). gzip_comp_level 5 (sweet spot CPU vs степень; уровень 9 расточительный). Соберите nginx с brotli (или используйте дистрибутив типа openresty / nginx-extras) — ~15-20% лучшее сжатие для современных клиентов. Pre-compress статики в build-пайплайне + используйте _static on.

Типичные ошибки

Ловушки brotli: сжатие картинок (JPEG/PNG/WebP — уже сжаты, тратит CPU); gzip on для бинарных типов (application/octet-stream — медленно + без пользы); brotli на уровне 11 для динамики (CPU-bound per request); не сжимают JSON API-ответы (200 KB JSON становится 25 KB с gzip — лёгкая победа).

Связанные понятия

Полезные ресурсы