Кэшировние статики в nginx
Немного теории или что такое Cache-control
Для того, чтобы управлять кэшированием в браузере используется HTTP заголовок Cache-control. Он имеет несколько директив, но главные следующие:
Cache-Control: [private|public|no-cache], max-age=количество_секунд,
- private - кэширование только на браузере пользователя
- public - кэширование на публичных прокси-серверах
- no-cache - нельзя кэшировать
- max-age - время жизни кэша в секундах.
Что кэшировать?
- Картинки
- CSS
- Javascript
- Загружаемые документы (doc, xls, pdf и подобные)
При highload кэшировать следует и другие файлы, которые изменяются реже чем раз в несколько минут. Однако при этом возникает одна проблема. Если изменить содержимое файла, то пользователь получит версию из кэша, а не новую версию.
Решается с помощью версионирования. Браузер хранит в кэше файлы соответственно их адресам URL. Если добавить GET параметр в запрос, то браузер заново запросит файл. Поэтому, при каждом обновлении CSS и Javascript файлов следует добавлять в GET параметр новое значение.
<script src="jquery.js?7"></script>
Что прописать в конфиг?
server {
...
# Static Content
location ~* ^.+\.(jpg|jpeg|gif|png|ico|tiff|css|js)$ {
# Кеширум на 6 месяцев
expires 6M;
# Кешируем везде (и на прокси и на клиентах)
add_header Cache-Control public;
}
...
}
Проверить кэширование можно с помощью инструмента Cache-control Checker