NGINX
#nginx#gzip#compression#performance#optimization

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 для баланса.