Справочник

gzip в nginx: как включить сжатие стилей и скриптов

В Ubuntu строка gzip on уже включена, но nginx сжимает только страницы HTML. Чтобы сжимались стили, скрипты и JSON, уберите знак # в начале строки gzip_types в файле /etc/nginx/nginx.conf.

≈ 7 мин чтения
Содержание 9

Что сделать прямо сейчас

  1. Команды вводятся на сервере: подключитесь к нему по SSH ([как подключиться](/instrukcii/kak-podklyuchitsya-k-vps-po-ssh/)) и набирайте их в том же окне.
  2. Откройте главный файл настроек nginx: sudo nano /etc/nginx/nginx.conf. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter.
  3. Найдите блок сжатия: Ctrl+W, слово gzip_types, Enter. Эта строка и несколько строк над ней начинаются со знака # — так они выключены.
  4. Уберите # и пробел в начале строк gzip_vary, gzip_proxied, gzip_comp_level и gzip_types. Поставьте курсор стрелками прямо перед словом gzip и нажмите Backspace два раза — на Mac эта клавиша называется delete.
  5. Сохраните файл — Ctrl+O, Enter, затем Ctrl+X — и проверьте настройки: sudo nginx -t. В ответе должны быть слова syntax is ok и test is successful. Тогда примените их: sudo systemctl reload nginx. Если команда ничего не ответила, настройки применены.
  6. Проверьте сжатие — как это сделать.

Если проверка нашла ошибку, nginx назовёт файл и номер строки, а сайт продолжит работать на старых настройках. Что значит сообщение — Все ошибки nginx.

Что сжимается по умолчанию

В файле /etc/nginx/nginx.conf в Ubuntu 24.04 есть блок про сжатие. Включена в нём одна строка — gzip on;. Остальные начинаются со знака # и не действуют. Без строки gzip_types nginx сжимает только ответы с типом text/html, то есть страницы. Стили, скрипты и JSON уходят несжатыми.

После правки блок выглядит так:

gzip on;

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript
    text/xml application/xml application/xml+rss text/javascript;

Здесь строка gzip_types перенесена, чтобы поместиться на экран. В файле она одна длинная — переносить её не нужно.

СтрокаЧто делаетЕсли её нет
gzip on;включает сжатиесжатия нет
gzip_types …;какие типы файлов сжимать, кроме HTMLсжимается только HTML
gzip_vary on;добавляет к сжатым ответам заголовок Vary: Accept-Encoding: кэширующие серверы между сайтом и посетителем держат сжатую и несжатую копии отдельнозаголовка нет
gzip_proxied any;сжимает ответы и на запросы через прокси-сервер — nginx узнаёт их по заголовку Viaтакие ответы не сжимаются
gzip_comp_level 6;степень сжатия от 1 до 9: выше — файлы меньше, но больше работы процессорустепень 1

Значения по умолчанию на этой странице — для nginx 1.24 из Ubuntu 24.04. Версию на сервере покажет nginx -v.

Какие файлы сжимать

Тип файла nginx определяет по расширению — по списку из файла /etc/nginx/mime.types. В gzip_types пишут именно типы, а не расширения.

ФайлыТипЧто делать
.csstext/cssуже в строке Ubuntu
.jsapplication/javascriptуже в строке Ubuntu
.jsonapplication/jsonуже в строке Ubuntu
.txt и .xmltext/plain, text/xmlуже в строке Ubuntu
.svgimage/svg+xmlдобавьте в конец строки gzip_types, перед точкой с запятой: SVG — текстовый файл
.jpg, .png, .webp, .woff2image/jpeg, image/png, image/webp, font/woff2не добавляйте: эти файлы уже сжаты, повторное сжатие только нагрузит процессор

Значение gzip_types *; включает сжатие любых типов, в том числе картинок, — его лучше не ставить.

Как проверить, что сжатие работает

Попросите у сайта сжатый ответ и посмотрите заголовки. Вместо example.com — адрес вашего сайта:

curl -sI -H 'Accept-Encoding: gzip' https://example.com/

Если сжатие работает, в ответе будет строка Content-Encoding: gzip. curl может показать имена заголовков маленькими буквами — это то же самое. Без части -H 'Accept-Encoding: gzip' nginx ответит без сжатия: так curl сообщает, что не умеет распаковывать. Браузеры просят сжатие сами.

Страницы HTML сжимаются и без gzip_types. Чтобы проверить стили, нужен адрес CSS-файла. Найдите его в коде главной страницы:

curl -s https://example.com/ | grep -o 'href="[^"]*\.css[^"]*"'

Команда покажет ссылки на файлы стилей, например href="/css/style.css". Проверьте этот файл той же командой, адрес возьмите в кавычки:

curl -sI -H 'Accept-Encoding: gzip' 'https://example.com/css/style.css'

Подробнее о ключах curl — команды wget и curl.

Когда nginx не сжимает ответ

  • тип файла не указан в gzip_types — кроме text/html;
  • код ответа не 200, не 403 и не 404 — например, 301 или 500;
  • в ответе уже есть заголовок Content-Encoding: его поставило приложение, и nginx второй раз не сжимает;
  • ответ короче gzip_min_length — по умолчанию 20 байт; длину nginx берёт из заголовка Content-Length;
  • браузер или программа не прислали заголовок Accept-Encoding со словом gzip;
  • запрос пришёл через прокси-сервер с заголовком Via, а строки gzip_proxied нет;
  • запрос по HTTP/1.0: gzip_http_version по умолчанию 1.1.

Где писать gzip

Директивы сжатия можно писать в блоках http, server и location, а gzip — ещё и в if внутри location. В Ubuntu они стоят в блоке http файла nginx.conf и действуют для всех сайтов на сервере.

Чтобы выключить сжатие для одного сайта, напишите в его блоке server строку gzip off;. Своя строка gzip_types в блоке server заменяет список из nginx.conf, а не дополняет его: перечислите в ней все нужные типы.

Не пишите gzip on; второй раз в файле из /etc/nginx/conf.d/: такие файлы подключаются внутрь того же блока http, и проверка sudo nginx -t ответит "gzip" directive is duplicate. Так же с gzip_vary и gzip_comp_level.

Ошибки и как их исправить

Что видитеЧто делать
HTML сжимается, стили и скрипты — нетуберите # в начале строки gzip_types — шаги
"gzip" directive is duplicateстрока gzip on написана дважды в одном блоке: удалите ту, что в файле из conf.d
unknown directive "gzip_type"опечатка в имени: разбор ошибки
curl без -H 'Accept-Encoding: gzip' не показывает Content-Encodingтак и должно быть: добавьте эту часть в команду
браузер пишет ERR_CONTENT_DECODING_FAILEDразбор ошибки

Источники

Сверено 14 октября 2026 года.

Что почитать дальше