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
    Додана можливість налаштування винятків.