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-параметрами або без них з кешу буде повертатися однакова відповідь).
  • «Термін життя» — через скільки хвилин з моменту останнього використання кеш буде видалено.
    • Підбирається індивідуально. Для сайтів з частими оновленнями контенту можна використовувати невеликі значення, з нечастими оновленнями — більш високі.

У розділі «Налаштування сайту» на вкладці «Кешування» натисніть «Очистити кеш».

Зміст

    (4)