Немного теории или что такое 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