NGINX
#nginx#cache#static#gzip#brotli#security#performance

Nginx: кеширование статических ассетов (cache-control, gzip, защита)

Блок для статических файлов: cache-control immutable, gzip/brotli, защита скрытых файлов (.env, .git).

Как использовать

  1. Скопируйте нужный фрагмент кода.
  2. Вставьте в свой проект и при необходимости измените под задачу.
  3. Проверьте зависимости и окружение (версии, переменные).

Оптимизация статических ассетов через кеширование, сжатие и защиту скрытых файлов. Добавьте в server block для ускорения загрузки.

server {
    listen 443 ssl http2;
    server_name example.com;
    
    root /var/www/html;
    index index.html;
    
    # Блокировка доступа к скрытым файлам
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
    
    # Блокировка .env, config файлов
    location ~ \.(env|ini|conf|log|sql)$ {
        deny all;
        access_log off;
    }
    
    # Статические ассеты с долгим кешированием
    location ~* \.(jpg|jpeg|png|gif|ico|svg|webp|avif)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        add_header Vary "Accept-Encoding";
        access_log off;
    }
    
    # CSS, JS с кешированием
    location ~* \.(css|js)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        add_header Vary "Accept-Encoding";
        access_log off;
        
        # Включаем gzip для текстовых файлов
        gzip on;
        gzip_vary on;
        gzip_types text/css application/javascript text/javascript;
        gzip_min_length 1000;
    }
    
    # Шрифты
    location ~* \.(woff|woff2|ttf|otf|eot)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        add_header Access-Control-Allow-Origin "*";
        access_log off;
    }
    
    # Включаем Brotli сжатие (требует модуль ngx_brotli)
    # Раскомментируйте, если модуль установлен:
    # location ~* \.(css|js|html|svg|xml|json)$ {
    #     brotli on;
    #     brotli_comp_level 6;
    #     brotli_types text/css application/javascript text/javascript application/json text/xml application/xml;
    # }
    
    # Основной location для приложения
    location / {
        try_files $uri $uri/ /index.html;
    }
}

Минимальная версия (без brotli):

# Статика с кешем
location ~* \.(jpg|jpeg|png|gif|ico|svg|webp|css|js|woff|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
    access_log off;
    
    gzip on;
    gzip_types text/css application/javascript image/svg+xml;
}

# Защита скрытых файлов
location ~ /\. {
    deny all;
}

Usage:

Добавьте блоки в server {} вашего сайта. Проверьте конфигурацию: nginx -t и перезагрузите: systemctl reload nginx.

Notes:

⚠️ immutable означает, что файл никогда не изменится — используйте только для версионированных ассетов (например, app.abc123.js). Для обычных файлов используйте public, max-age=31536000. gzip_static требует модуль ngx_http_gzip_static_module (обычно включён в сборку). Brotli требует отдельную установку модуля ngx_brotli — раскомментируйте блок только если модуль установлен.