Прозоре кешування в nginx для всіх і кожного

Припустимо, що у нас є сайт, на який регулярно дають посилання з хабра. Нам потрібно підготувати його до різких сплесків відвідуваності. Як це зробити?

З версії 0.8.46 у nginx з'явилися опції, що дозволяють легко та просто налаштувати прозоре кешування для анонімних користувачів.

Для роботи цієї схеми від сайту потрібно дуже мало: достатньо лише не починати сесію, тобто не відправляти сесійну куку, без явної потреби. Рідкісний сайт не можна довести до такого стану, а значить більшість сайтів можна захистити від різких сплесків відвідуваності за допомогою nginx з мінімальними витратами сил і часу.

Навчимо сайт розпочинати сесію тільки коли вона потрібна

Для широкопоширених сайтів на PHP це можна зробити виставивши в нуль session.auto_start в php.ini або, краще, налаштування віртуального хоста Apache. Також нам потрібно задати відповідні ім'я для сесійної куки:

Якщо сайт сам стартує сесію в коді, тоsession_start()слід замінити на:

Так, сесія буде розпочата лише якщо

  • кукі з сесією вже є або якщо
  • нам відправляють форму, наприклад, з логіном та паролем.
Що нам і потрібно.

Налаштуємо nginx на кешування запитів без сесійної куки

Після того як ми домоглися того, що сайт не надсилає сесійну куку гостям сайту, налаштуємо nginx на збереження в кеш запитів без сесійної куки.

У будь-якому зручному місці, наприклад, у конфізі віртуального хоста nginx перед блоком server, додамо рядки:

Не забуваємо створити відповідні каталоги:

У відповідний блок location додамо виділені три рядки:

Тонка настройка кешування

Для повного відключення кешування, наприклад, лічильників, використовуйте:

Перевірка на міцність

Перевіримо головну сторінку сайту на міцність у сто потоків:

З використанням кешування тестовий сайт легко видавав понад 100 rps, воно й зрозуміло. Без кешу - передбачувано показував 503 помилку на

Примусове оновлення кешу

Якщо змінити директиву proxy_cache_bypass так:

То можна буде примусово оновлювати кеш сторінки за необхідності:

Заголовок краще замінити на будь-який інший, відомий тільки вам.

А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»