2.4.1.1.13. Серверное кеширование

Важные моменты:

  • При включении кеширования убедитесь, чтобы сайт отдавал заголовки запрета кеширования при работе с его админ-панелью, иначе такие страницы могут попадать в кеш и быть доступны неавторизованным пользователям, либо настройте исключения.
  • При использовании сессий PHP автоматически добавляет в ответы заголовок Cache-Control и кеширование по умолчанию не работает. Для работы кеширования значение ограничителя кеша должно быть public (см. session_cache_limiter).

sequenceDiagram autonumber participant client as Клиент box Хостинг participant cache as Кеш participant site as Сайт end client->>cache: Запрос cache->>cache: Проверка кеша alt Кеш есть и не игнорируется cache->>client: Ответ из кеша else Кеша нет или он игнорируется cache->>site: Запрос end site->>site: Обрабртка запроса alt Без сохранения в кеше site->>client: Ответ else С сохранением в кеше site->>cache: Ответ cache->>cache: Кеширование ответа cache->>client: Ответ end

При использовании кеширования все ответы сервера сохраняются в кеше и при поступлении новых запросов вместо передачи их на обработку скриптам сайта возвращается уже готовый ответ из кеша. Использование кеширования помогает существенно снизить нагрузку на веб-сервер.

Страница не сохраняется в кеше:

  • Если запрос содержит:
    • Заголовок 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-параметрами или без них из кеша будет возвращаться одинаковый ответ).
  • Срок жизни — через сколько минут с момента последнего использования кеш будет удалён.
    • Подбирается индивидуально. Для сайтов с частыми обновлениями контента можно использовать небольшие значения, с редкими обновлениями — более высокие.
Отдельная настройка исключений нужна только для тех частей сайта, для которых скрипты сайта не возвращают заголовки игнорирования кеша (см. выше).

Если нужно, чтобы какие-то страницы или разделы сайта не попадали в кеш независимо от наличия необходимых для этого заголовков, в блоке «Исключения из кеширования» добавьте правила для их исключения:

После нажатия кнопки «Добавить» в форме добавления указываются следующие данные:

  • Применение — по какой части URL будет выполняться поиск:
    • URL начинается на — в начале URL.
    • URL заканчивается на — в конце URL.
    • URL содержит — в любой части URL.
  • URL — строка, поиск которой будет выполняться в выбранной части URL:
    • Домен указывать не нужно.
    • Слеш / в начале и конце указывать не нужно.

Несколько примеров:

  • Если выбрать URL начинается на и указать URL как admin, исключение добавится как /admin* и кеширование не будет применяться для всех URL, которые начинаются с /admin.
  • Если выбрать URL заканчивается на и указать URL как page, исключение добавится как */page и кеширование не будет применяться для всех URL, которые заканчиваются на /page.
  • Если выбрать URL содержит и указать URL как contains, исключение добавится как */contains* и кеширование не будет применяться для всех URL, в середине которых есть /contains.

В блоке «Настройки кеширования сайта» нажмите «Очистить кеш».

Содержание

    (6)

    Комментарии

    WEBUS.in.ua
    Чи можна зробити виключення з кешу чимсь іншим крим заголовків веб-сторінки?
    karlov
    На поточний момент підтримуються тільки заголовки. Можливість виключення каталогів поки що тільки розглядається.
    karlov
    Додана можливість налаштування винятків.