gzip
Тема дорожной карты · Nginx
Gzip-сжатие в Nginx уменьшает размер HTTP-ответов, сжимая текстовый контент перед передачей, что снижает потребление трафика и улучшает время загрузки страниц для конечных пользователей. Для включения gzip на веб-сервере Nginx требуется как минимум gzip on; в блоке http или server, а также gzip_types для указания MIME-типов, подходящих для сжатия, поскольку Nginx по умолчанию не сжимает бинарные форматы — изображения или PDF. Директива gzip_comp_level 6; управляет интенсивностью сжатия (1–9), gzip_min_length 256; предотвращает сжатие маленьких ответов, где накладные расходы превышают выгоду, а gzip_proxied any; гарантирует, что ответы клиентам обратного прокси также сжимаются. Nginx gzip может отдавать предварительно сжатые файлы .gz для статических ресурсов с помощью gzip_static on;, исключая повторную нагрузку на CPU для редко изменяемых файлов — минифицированного JavaScript или CSS-бандлов. Gzip-сжатие в Nginx — одна из наиболее универсально применимых настроек производительности, рекомендованная практически для каждого продакшен-сервера и развёртывания обратного прокси.
Как это работает
gzip использует 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.
Типичные ошибки
Ловушки gzip: сжатие картинок (JPEG/PNG/WebP — уже сжаты, тратит CPU); gzip on для бинарных типов (application/octet-stream — медленно + без пользы); brotli на уровне 11 для динамики (CPU-bound per request); не сжимают JSON API-ответы (200 KB JSON становится 25 KB с gzip — лёгкая победа).