Настройка сжатия Gzip и Brotli в Nginx: ускорение загрузки сайта в 3-5 раз
Почему сайты загружаются медленно
Современные веб-приложения передают браузеру мегабайты исходного кода JavaScript, CSS-стилей и HTML-разметки. Без включенного сжатия пользователи с мобильным интернетом ждут загрузки страниц по 5–10 секунд, что приводит к уходу клиентов и снижению позиций в поисковой выдаче Google и Яндекс (показатели Core Web Vitals).
- Инструмент Google PageSpeed Insights выдает рекомендацию: «Включите сжатие текста».
- В сетевой вкладке браузера размер файла
bundle.jsравен 2.5 МБ вместо 400 КБ. - В заголовках ответов сервера отсутствует заголовок
Content-Encoding: gzipилиbr.
Включение и правильная настройка Gzip в Nginx
- Шаг 1. Открываем главный конфигурационный файл Nginx:
sudo nano /etc/nginx/nginx.conf - Шаг 2. Находим и активируем блок настроек Gzip:
Найдите секцию
http { ... }и приведите директивы сжатия к следующему виду:## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 5; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_min_length 256; gzip_types text/plain text/css text/javascript text/xml application/javascript application/x-javascript application/json application/xml application/rss+xml image/svg+xml; - Шаг 3. Проверяем синтаксис и перезагружаем Nginx:
sudo nginx -t && sudo systemctl reload nginx - Шаг 4. Проверяем работу сжатия через терминал:
curl -H "Accept-Encoding: gzip" -I http://ВАШ_САЙТ.comВ ответе должна появиться строчка:
Content-Encoding: gzip.
Почему нельзя сжимать JPG, PNG и MP4: Никогда не добавляйте бинарные форматы (картинки, видео, PDF) в gzip_types. Они уже сжаты собственными алгоритмами. Повторное сжатие только перегрузит процессор сервера без уменьшения размера файлов.
Частые вопросы (FAQ)
Какой уровень сжатия gzip_comp_level выбрать?
Оптимальное значение — от 4 до 6. Значения 7–9 дают выигрыш в размере всего 1–2%, но при этом нагружают процессор сервера в несколько раз сильнее.
Что эффективнее: Gzip или Brotli?
Алгоритм Brotli (разработка Google) сжимает текстовые файлы на 15–25% эффективнее Gzip. Если модуль Brotli поддерживается вашей сборкой Nginx, рекомендуется использовать его в связке с fallback на Gzip.
Что делает директива gzip_min_length 256?
Она запрещает сжимать файлы размером менее 256 байт, так как накладные расходы на сжатие крошечных файлов делают их размер только больше.
Влияет ли включение сжатия на нагрузку процессора?
На современных многоядерных процессорах влияние gzip при уровне сжатия 5 практически незаметно (менее 1–3% CPU).