Nginx: сжатие gzip для текстовых файлов
Настройка gzip сжатия в nginx для HTML, CSS, JS, JSON. Оптимизация уровня сжатия и типов файлов.
Настройка gzip сжатия в nginx для уменьшения размера передаваемых данных. Улучшает скорость загрузки сайта.
Базовая настройка gzip
http {
# Включаем gzip
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript
application/json application/javascript application/xml+rss
application/rss+xml font/truetype font/opentype
application/vnd.ms-fontobject image/svg+xml;
gzip_min_length 1000;
server {
listen 80;
server_name example.com;
# ...
}
}
Оптимизированная настройка
http {
gzip on;
gzip_vary on;
gzip_proxied any;
# Уровень сжатия (1-9, 6 оптимально)
gzip_comp_level 6;
# Минимальный размер для сжатия (меньше не сжимаем)
gzip_min_length 1000;
# Типы файлов для сжатия
gzip_types
text/plain
text/css
text/xml
text/javascript
application/json
application/javascript
application/xml+rss
application/rss+xml
application/xml
image/svg+xml
font/truetype
font/opentype
application/vnd.ms-fontobject;
# Отключаем сжатие для старых браузеров
gzip_disable "msie6";
server {
listen 80;
server_name example.com;
# ...
}
}
Gzip для проксированных ответов
server {
listen 80;
server_name example.com;
location /api/ {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
# Сжатие ответов от backend
gzip on;
gzip_types application/json application/javascript text/plain;
}
}
Проверка работы gzip
# Проверка заголовка Content-Encoding
curl -H "Accept-Encoding: gzip" -I http://example.com/style.css
# Должен быть заголовок: Content-Encoding: gzip
Отключение gzip для конкретных location
server {
listen 80;
server_name example.com;
gzip on;
gzip_types text/css application/javascript;
# Отключаем gzip для изображений (они уже сжаты)
location ~* \.(jpg|jpeg|png|gif|ico|webp|avif)$ {
gzip off;
expires 1y;
}
}
Usage:
Добавьте настройки gzip в http блок для применения ко всем server блокам. Используйте gzip_comp_level 6 как баланс между размером и CPU нагрузкой.
Notes:
⚠️ Не сжимайте уже сжатые файлы (JPEG, PNG, GIF, WebP) — это увеличит размер. gzip_min_length 1000 предотвращает сжатие маленьких файлов (экономия CPU). Уровень сжатия 9 даёт максимальное сжатие, но требует больше CPU — используйте 6 для баланса.