Прозоре кешування в 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 так:
То можна буде примусово оновлювати кеш сторінки за необхідності:
Заголовок краще замінити на будь-який інший, відомий тільки вам.
А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»