Уровни сжатия

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

Уровень сжатия в Nginx управляет компромиссом между использованием CPU и степенью уменьшения размера при сжатии HTTP-ответов перед отправкой клиентам. Для gzip уровень задаётся директивой gzip_comp_level и принимает значения от 1 (быстрее всего, наименьшее сжатие) до 9 (медленнее всего, наибольшее сжатие); gzip_comp_level 6; является широко рекомендуемым значением по умолчанию, балансирующим пропускную способность и экономию трафика на нагруженном веб-сервере. Для модуля Brotli brotli_comp_level аналогично варьируется от 1 до 11, где уровни выше 6 оправданы с точки зрения CPU только для предварительно сжатых статических ресурсов, а не для динамического контента на лету в обратном прокси. Слишком высокий уровень сжатия расходует CPU воркеров и увеличивает задержку ответа, а слишком низкий даёт минимальную экономию трафика и не улучшает производительность для клиентов с ограниченным каналом. Выбор оптимального уровня сжатия — важное решение при настройке производительности Nginx, которое следует проверять под реалистичной нагрузкой с метриками из stub_status или внешнего инструмента мониторинга.

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

Уровни сжатия использует 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.

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

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

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

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