Nginx · 3 min read · Dec 26, 2025
Настройка кэширования статических файлов в браузерах на nginx
Этот учебник объясняет, как вы можете настроить nginx для установки заголовка Expires HTTP и директивы max-age заголовка Cache-Control для статических файлов (таких как изображения, CSS и JavaScript файлы) на дату в будущем, чтобы эти файлы кэшировались браузерами ваших посетителей. Это экономит пропускную способность и делает ваш веб-сайт более быстрым (если пользователь посещает ваш сайт во второй раз, статические файлы будут загружены из кэша браузера).
Я не даю никаких гарантий, что это сработает для вас!
1 Предварительная заметка
Я предполагаю, что у вас есть рабочая установка nginx, например, как показано в этом учебнике: Установка Nginx с поддержкой PHP5 (и PHP-FPM) и MySQL (LEMP) на Ubuntu 12.04 LTS
2 Настройка nginx
Заголовок Expires HTTP можно установить с помощью директивы expires, которая может быть размещена внутри http {}, server {}, location {}, или в условном операторе внутри блока location {}. Обычно вы будете использовать его в блоке location для ваших статических файлов, например, следующим образом:
| location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; } |
В приведенном выше примере все файлы .jpg, .jpeg, .png, .gif, .ico, .css и .js получают заголовок Expires с датой, которая на 365 дней в будущем от времени доступа браузера. Поэтому вы должны убедиться, что блок location {} действительно содержит только статические файлы, которые могут быть кэшированы браузерами.
Перезагрузите nginx после внесения изменений:
/etc/init.d/nginx reloadВы можете использовать следующие настройки времени с директивой expires:
- off делает так, что заголовки Expires и Cache-Control не будут изменены.
- epoch устанавливает заголовок Expires на 1 января 1970 года 00:00:01 GMT.
- max устанавливает заголовок Expires на 31 декабря 2037 года 23:59:59 GMT и max-age заголовка Cache-Control на 10 лет.
- Время без префикса @ означает время истечения, относительное к времени доступа браузера. Можно указать отрицательное время, которое устанавливает заголовок Cache-Control в no-cache. Пример: expires 10d; или expires 14w3d;
- Время с префиксом @ указывает на абсолютное время истечения, записанное в форме Hh или Hh:Mm, где H варьируется от 0 до 24, а M варьируется от 0 до 59. Пример: expires @15:34;
Вы можете использовать следующие единицы времени:
- ms: миллисекунды
- s: секунды
- m: минуты
- h: часы
- d: дни
- w: недели
- M: месяцы (30 дней)
- y: годы (365 дней)
Примеры: 1h30m для одного часа тридцати минут, 1y6M для одного года и шести месяцев.
Также обратите внимание, что если вы используете заголовок Expires на дальнее будущее, вам нужно изменять имя файла компонента каждый раз, когда компонент изменяется. Поэтому хорошей идеей будет версионирование ваших файлов. Например, если у вас есть файл javascript.js и вы хотите его изменить, вам следует добавить номер версии к имени файла измененного файла (например, javascript-1.1.js), чтобы браузеры должны были его загрузить. Если вы не измените имя файла, браузеры загрузят (старый) файл из своего кэша.
Вместо того чтобы основывать заголовок Expires на времени доступа браузера (например, expires 10d;), вы также можете основывать его на дате изменения файла (обратите внимание, что это работает только для реальных файлов, которые хранятся на жестком диске!) с помощью ключевого слова modified, которое предшествует времени:
expires modified 10d;3 Тестирование
Чтобы проверить, работает ли ваша конфигурация, вы можете установить плагин Live HTTP Headers для Firefox и получить доступ к статическому файлу через Firefox (например, изображение). В выводе Live HTTP Headers вы теперь должны увидеть заголовок Expires и заголовок Cache-Control с директивой max-age (max-age содержит значение в секундах, например, 31536000 — это один год в будущем):

4 Ссылки
- nginx HttpHeadersModule: http://wiki.nginx.org/HttpHeadersModule
- Плагин Live HTTP Headers для Firefox: https://addons.mozilla.org/en-us/firefox/addon/live-http-headers/
Об авторе
Фалко Тимме является владельцем Timme Hosting (ультра-быстрый веб-хостинг на nginx). Он является ведущим куратором HowtoForge (с 2005 года) и одним из основных разработчиков ISPConfig (с 2000 года). Он также внес вклад в книгу O’Reilly “Администрирование систем Linux”.
Get new posts in your inbox
No spam. Unsubscribe anytime.