Настройка кэширования и сжатия статических файлов в Nginx

Как ускорить загрузку сайта и снизить нагрузку на сервер.

Правильная настройка кэширования и сжатия статических файлов (изображения, CSS, JavaScript) позволяет значительно ускорить загрузку страниц, уменьшить потребление трафика и снизить нагрузку на сервер.

В этой статье мы разберём два важных механизма Nginx:

  • Директиву expires (управление временем кэширования в браузере)
  • Включение GZIP-сжатия для текстовых файлов

1. Настройка кэширования с помощью expires

Директива expires указывает браузеру, сколько времени файл можно хранить в кэше без повторного запроса к серверу.

Откройте конфигурационный файл вашего сайта (обычно /etc/nginx/conf.d/vhost.conf или аналогичный) и добавьте блок location для статических файлов:

location ~* \.(jpg|jpeg|png|gif|svg|webp|ico|css|js|woff|woff2|ttf|eot|mp4|webm|ogg|mp3|pdf|zip)$ {
    expires 30d;                    # кэш на 30 дней
    add_header Cache-Control "public";
    access_log off;                 # отключаем логи для статики (экономия ресурсов)
}

Рекомендуемые значения expires:

  • Изображения, шрифты, иконки: 30d или 1y
  • CSS и JavaScript: 7d30d (если часто меняются — меньше)
  • Файлы, которые почти не меняются: 1y

2. Включение GZIP-сжатия

GZIP значительно уменьшает размер текстовых файлов (HTML, CSS, JS, SVG и др.). Добавьте следующие строки в блок server {} вашего виртуального хоста:

server {
    ...

    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;               # уровень сжатия (1-9)
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_types
        text/plain
        text/css
        text/xml
        text/javascript
        application/javascript
        application/json
        application/xml
        application/rss+xml
        image/svg+xml;
}

3. Применение настроек для всех сайтов (шаблон)

Если вы хотите автоматически применять эти настройки ко всем виртуальным хостам, создайте файл шаблона:

sudo nano /usr/local/ispmgr/etc/server.templ

Добавьте в него:

location ~* \.(jpg|jpeg|png|gif|svg|webp|ico|css|js|woff|woff2|ttf|eot)$ {
    expires 30d;
    add_header Cache-Control "public";
    access_log off;
}

После изменения шаблона перезапустите Nginx:

sudo systemctl restart nginx

Полезные советы

  • После изменения конфигурации всегда проверяйте синтаксис: sudo nginx -t
  • Для максимальной производительности комбинируйте expires с заголовком Cache-Control: public.
  • Не ставьте слишком большой expires (больше года) на часто обновляемые файлы (CSS/JS), иначе пользователи долго не увидят изменения.
  • На VPS и выделенных серверах вы можете дополнительно настроить browser caching, FastCGI cache и proxy_cache для ещё большей оптимизации.

Помощь

Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!

Обновлено:
Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам