Сжатие
Тема дорожной карты · Nginx
HTTP-сжатие в Nginx уменьшает размер ответов, передаваемых по сети, кодируя их с помощью gzip или Brotli перед отправкой, что значительно ускоряет загрузку страниц и снижает расходы на трафик для операторов веб-серверов. Nginx поддерживает сжатие на лету через встроенный модуль ngx_http_gzip_module и сторонний динамический модуль ngx_brotli, оба активируются только когда клиент объявляет поддержку через заголовок запроса Accept-Encoding. Основные директивы для включения HTTP-сжатия — gzip on;, gzip_types text/plain text/css application/json; и gzip_comp_level 6; — могут быть размещены в контексте http, server или location файла /etc/nginx/nginx.conf. HTTP-сжатие в Nginx хорошо сочетается с кэшированием: предварительно сжатые статические файлы, отдаваемые через gzip_static on; или brotli_static on;, исключают повторную нагрузку на CPU на нагруженном обратном прокси или балансировщике нагрузки. Следует отключать сжатие для уже сжатых форматов — изображений, видео и PDF — исключив их MIME-типы из gzip_types, поскольку их повторное сжатие тратит CPU без ощутимого уменьшения размера.
Как это работает
Сжатие использует 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 — лёгкая победа).