Гид по технологиям

Настройка gzip-сжатия в Nginx на Debian Jessie

• 5 min read • Серверы • Обновлено 17 Nov 2025
Настройка gzip в Nginx на Debian
Настройка gzip в Nginx на Debian

Ключевые варианты запроса

  • настройка gzip nginx
  • включить gzip в nginx на debian
  • оптимизация передачи контента nginx
  • gzip vs brotli

1 Вступительная заметка

Предполагается, что у вас уже есть рабочая установка Nginx на Debian (Jessie). Если у вас ещё нет веб‑стека, сначала установите и настройте Nginx и PHP‑FPM/БД по инструкции для LEMP на Debian 8.

Важно: gzip сжатие применяется только к текстовым типам содержимого. Бинарные форматы (изображения, видео, архивы) обычно уже сжаты и дополнительное gzip‑сжатие бесполезно.

2 Конфигурация HttpGzipModule

Откройте файл /etc/nginx/nginx.conf:

nano /etc/nginx/nginx.conf

В секции http {} вы, возможно, уже найдёте включённый gzip:

[...]
http {  
[...]  

 ##  
 # Gzip Settings  
 ##  
  
 gzip on;  
 gzip_disable "msie6";  
  
 [...]
}
[...]

Объяснение ключевых директив:

  • gzip on; — включает gzip‑сжатие.

  • gzip_disable “MSIE [1-6]\.(?!.*SV1)”; — отключает gzip для старых версий Internet Explorer, которые не корректно поддерживают сжатый ответ.

Далее — полезные дополнительные настройки (см. документацию модуля на официальном сайте nginx):

  • gzip_http_version 1.1; — включить gzip для HTTP/1.1 (HTTP/1.0 без Content-Length сделает невозможным Keep-Alive).

  • gzip_vary on; — добавляет заголовок Vary: Accept-Encoding, чтобы прокси корректно кэшировали и отдавали и сжатую, и несжатую версии.

  • gzip_comp_level 6; — уровень сжатия от 1 (быстрый, менее сжатый) до 9 (медленный, сильно сжатый). 6 — разумный компромисс.

  • gzip_proxied any; — включать сжатие для запросов, пришедших через прокси.

  • gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js; — список MIME‑типов, для которых включается сжатие (text/html всегда сжимается).

  • gzip_buffers 16 8k; — число и размер буферов для сжатия. Увеличение помогает при больших JS/CSS файлах.

Пример финальной секции http:

[...]
http {
    [...]
    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
    gzip_buffers 16 8k;
    gzip_disable "MSIE [1-6]\\.(?!.*SV1)";
    [...]
}
[...]

После правки конфигурации перезагрузите Nginx:

service nginx reload

Важно

  • Не включайте gzip для бинарных типов (image/, audio/ и т. п.). Это бесполезно и может лишь увеличить нагрузку.

Примечание

  • Уровень gzip_comp_level выше 6 даёт более сильное сжатие, но заметно повышает CPU‑нагрузку. На слабых серверах лучше использовать 4–6.

3 Тестирование

Проверить работу можно в инструментах разработчика браузера (Firefox/Chrome): откройте статическую HTML-страницу, посмотрите HTTP заголовки. Клиент должен отправлять Accept-Encoding: gzip,deflate, а сервер — отвечать Content-Encoding: gzip и Vary: Accept-Encoding.

Пример — заголовки в DevTools:

Заголовки HTTP с включённой gzip-сжатой передачей в инструментах разработчика

Используйте curl для автоматической проверки в терминале:

curl -I -H "Accept-Encoding: gzip" https://example.com/somepage.html

В ответе должна быть строка Content-Encoding: gzip.

Критерии приёмки

  • Запрос с Accept-Encoding: gzip получает Content-Encoding: gzip.
  • Vary: Accept-Encoding присутствует в ответе.
  • Размер текстовых статических файлов существенно уменьшился по сравнению с несжатой версией.

4 Практические советы по производительности

  • Баланс CPU и сети: на серверах с ограниченным CPU и большим трафиком имеет смысл поручить сжатие фронтенд-прокси (например, CDN) или использовать более лёгкое сжатие (уровень 1–3).

  • Буферизация: если у вас много больших JS/CSS, увеличьте gzip_buffers и проконтролируйте расход памяти.

  • Keep-Alive и HTTP/1.0: gzip_http_version 1.1 гарантирует корректную работу с Keep-Alive.

  • Кеширование: убедитесь, что прокси/кеши (Varnish, CDN) корректно различают compressed/uncompressed версии — для этого и нужен Vary: Accept-Encoding.

  • Мониторинг: отслеживайте CPU и задержки после включения, чтобы убедиться, что влияние на сервер приемлемо.

5 Альтернативы и когда gzip не подходит

  • Brotli: современный алгоритм сжатия (br) даёт лучшее сжатие для текстовых ресурсов при умеренных накладных расходах. Поддерживается новыми браузерами и может быть использован совместно с gzip (сервер выбирает в зависимости от Accept-Encoding). Минусы: медленнее на этапе сжатия, не во всех версиях Nginx доступен без модулей.

  • CDN: если вы используете CDN, часто имеет смысл делегировать сжатие CDN, чтобы снять нагрузку с origin-сервера.

Контрпример/когда gzip не работает

  • Сжатие не даст выигрыша для уже сжатых форматов (.jpg, .png, .mp4, .zip).
  • Старые прокси, нарушающие Vary, могут отдать сжатый контент браузеру, который не умеет его распаковать — включение gzip_vary решает эту проблему.

6 Отладка и распространённые проблемы

  1. Нету Content-Encoding: gzip в ответе
  • Проверьте, что Accept-Encoding действительно отправлен клиентом.
  • Убедитесь, что MIME‑тип ответа входит в gzip_types или является text/html.
  • Проверьте, что обработка запроса не идёт через сторонний модуль, который отключает gzip для данного location.
  1. Клиенты получают сжатый контент и не могут его распаковать
  • Проверьте Vary: Accept-Encoding и gzip_disable директивы для устаревших браузеров.
  1. Резкое увеличение CPU
  • Понизьте gzip_comp_level; рассмотрите использование CDN или внешнего прокси для сжатия.

7 Контрольный чеклист перед продакшен‑деплоем

  • Включён gzip в общей секции http или в нужных server/location.
  • Установлен разумный gzip_comp_level (4–6).
  • Настроены gzip_types для всех текстовых форматов, используемых на сайте.
  • Добавлен gzip_vary on; для корректной работы кэшей.
  • Протестировано curl и в браузере (DevTools).
  • Мониторинг CPU и времени отклика перед/после включения.

8 Быстрый рецепт (mini‑methodology)

  1. Внесите изменения в /etc/nginx/nginx.conf (секция http).
  2. Примените: service nginx reload.
  3. Проверка: curl -I -H “Accept-Encoding: gzip” .
  4. Наблюдайте метрики 24–48 часов.
  5. При необходимости скорректируйте gzip_comp_level / gzip_buffers.

9 Ссылки

Итог

Gzip — низкозатратный способ значительно сократить объём текста, передаваемого клиентам. При разумных настройках и внимательном мониторинге он повышает скорость загрузки страниц и уменьшает сетевой трафик. Для максимально возможного сжатия и современной поддержки рассмотрите brotli на фронте или использование CDN.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро