Nginx: кеширование статических ассетов (cache-control, gzip, защита)
Блок для статических файлов: cache-control immutable, gzip/brotli, защита скрытых файлов (.env, .git).
Как использовать
- Скопируйте нужный фрагмент кода.
- Вставьте в свой проект и при необходимости измените под задачу.
- Проверьте зависимости и окружение (версии, переменные).
Оптимизация статических ассетов через кеширование, сжатие и защиту скрытых файлов. Добавьте в 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 — раскомментируйте блок только если модуль установлен.