gzip_types

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

Директива gzip_types в Nginx задаёт список MIME-типов, для которых применяется gzip-сжатие ответов, дополняя всегда включённый text/html. Исчерпывающая конфигурация gzip_types обычно включает text/plain text/css text/xml application/json application/javascript application/xml+rss image/svg+xml font/woff2;, охватывая наиболее объёмные текстовые ресурсы, отдаваемые современным веб-сервером или обратным прокси. Бинарные форматы — image/jpeg, image/png, audio/mpeg, video/mp4 — следует явно исключать из gzip_types или просто не указывать, поскольку они уже сжаты, и их повторное сжатие тратит CPU без уменьшения размера ответа. Директива gzip_types может быть размещена в контексте http, server или location файла /etc/nginx/nginx.conf, а дочерние контексты наследуют или переопределяют родительский список для детального управления. Выбор правильного списка gzip_types — важный шаг настройки производительности Nginx, поскольку сжатие неподходящих типов контента может фактически увеличить размер ответов и снизить общую пропускную способность.

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

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

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

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