2.4.1.1.13. Серверное кеширование
Важные моменты:
- При включении кеширования убедитесь, чтобы сайт отдавал заголовки запрета кеширования при работе с его админ-панелью, иначе такие страницы могут попадать в кеш и быть доступны неавторизованным пользователям.
- При использовании сессий PHP автоматически добавляет в ответы заголовок
Cache-Controlи кеширование по умолчанию не работает. Для работы кеширования значение ограничителя кеша должно бытьpublic(см. session_cache_limiter).
Как работает кеширование
При использовании кеширования все ответы сервера сохраняются в кеше и при поступлении новых запросов вместо передачи их на обработку скриптам сайта возвращается уже готовый ответ из кеша. Использование кеширования помогает существенно снизить нагрузку на веб-сервер.
Страница не сохраняется в кеше:
- Если запрос содержит:
- Заголовок
Cookieс ключомnocacheс непустым значением и не равным0. - GET-параметр
nocacheс непустым значением и не равным0. - Заголовок
Authorizationс непустым значением и не равным0.
- Если ответ содержит:
- Заголовок
X-Accel-Expiresсо значением0. - Заголовок
Set-Cookie. - Заголовок
Varyсо специальным значением*. - Заголовок
Cache-Controlс любым из значений:max-age=0,private,no-store,no-cache.
- Если в разделе «Настройки PHP» отключён параметр «output_buffering» (когда буферизация отключена, nginx не обрабатывает данные с веб-сервера и не может их кешировать).
Существующий кеш игнорируется, если запрос содержит такие же заголовки/параметры, при которых страница не сохраняется в кеше (см. выше). ⚠️ Кеш при этом не перезаписывается и не удаляется. Например, при запросе A страница была сохранена в кеше, затем поступил запрос B с условиями для игнорирования кеша — кеш был проигнорирован и страница была возвращена сайтом, если поступит запрос C без условий для игнорирования кеша — будет возвращён кеш, который был сгенерирован для запроса A.
С помощью заголовка ответа X-Cache-Status можно следить за использованием кеша:
- Страница была возвращена сайтом:
MISS— страницы не было в кеше.BYPASS— кеш был проигнорирован (см. выше).EXPIRED— срок жизни кеша истёк.
- Страница была возвращена из кеша:
STALE— срок жизни кеша истёк, но с сайта не удалось получить актуальную версию страницы.REVALIDATED— срок жизни кеша истёк, но он был повторно проверен с помощью заголовкаIf-Modified-SinceилиIf-None-Match.UPDATING— срок жизни кеша истёк, но страница в процессе обновления с сайта.HIT— страница была возвращена из кеша.
Когда кеш игнорируется и в ответе есть заголовок Cache-Control, к статусу может быть добавлено обозначение причины, по которой кеш был проигнорирован: /PRIVATE, /NO-CACHE, /NO-STORE, /MAX-AGE.
Настройка кеширования
Серверное кеширование настраивается в разделе «Настройки сайта» на вкладке «Кеширование»:
- Режимы:
- «Отключено» — кеширование отключено.
- «Включено» — кеширование с учётом GET-параметров (для запросов к одной и той же странице с разными GET-параметрами и без них из кеша будут возвращаться разные ответы).
- «Игнорировать параметры запроса» — кеширование с игнорированием GET-параметров (для запросов к одной и той же странице с разными GET-параметрами или без них из кеша будет возвращаться одинаковый ответ).
- «Срок жизни» — через сколько минут с момента последнего использования кеш будет удалён.
- Подбирается индивидуально. Для сайтов с частыми обновлениями контента можно использовать небольшие значения, с редкими обновлениями — более высокие.
Очистка кеша
В разделе «Настройки сайта» на вкладке «Кеширование» нажмите «Очистить кеш».