Що означає keys_zone = myCache: 8m?
Як сказано в документації , nginx буде зберігати всі активні ключі, а інформація про дані зберігається в зоні спільної пам'яті, чиї name
та size
налаштовані параметром keys_zone. Як повноти, давайте розбитися на частину
/var/cache/nginx
- це місце, де зберігається фактичний кеш. Всередині папки кеш-файл був бінарним файлом, але ви можете легко помітити html-тег всередині нього.
levels=1:2
Параметр рівнів задає кількість підкаталогічних рівнів у кеші.
keys_zone=myCache:8m
визначав зону спільної пам'яті з назвою myCache з максимальним розміром 8 Мб. Він містить всі активні ключі та метадані кеша. Отже, кожного разу, коли nginx перевіряє, чи була кешована сторінка, вона спочатку звертається до зони спільної пам'яті, а потім шукає місце фактичного кешу, /var/cache/nginx
якщо кеш існує.
max_size
був максимальний розмір кешу, наприклад розмір файлів на /var/cache/nginx
.
inactive=1h
Вкажіть максимальний неактивний кеш часу, який можна зберігати. Кешовані дані, до яких немає доступу протягом часу, визначеного inactive
параметром, вилучаються з кеша незалежно від їх свіжості.
Як працює перевірка та видалення кешу
Взято зі списків розсилки nginx
Директива proxy_cache_valid визначає, як довго відповідь буде вважатися дійсною (і повертається без запитів до бекенду). Після закінчення цього часу відповідь буде вважатися "несвіжим" і або не повернеться, або залежатиме від налаштування proxy_cache_use_stale .
Довід неактивні з proxy_cache_path визначає , як довго відповідь буде зберігатися в кеші після останнього використання. Зауважте, що навіть застарілі відповіді будуть вважатися нещодавно використаними, якщо до них будуть запити.
Як я розумію, тут псевдокод працює як nginx
Коли запит надходить
if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
use it
else:
retrieve from backend
replace the old ones
В іншому процесі менеджер кеша виконує цю логіку
if (now() - cache.last_used) > inactive:
del cache
if all-cache.size > max-size:
del *the most inactive cache* until size < max-size
Що робити, якщо proxy_cache_valid (12h) вище вказаного неактивного значення (1h) у proxy_cache_path?
Поки запит і отримує доступ до певного кешу, цей об'єкт кеша буде діяти до 12 год після того, як об'єкт буде поставлений у кеш. Після цього кеш вважався недійсним, тому nginx виймається з бекенда та скидає дійсний таймер. Але якщо об'єкт був неактивним (не звертався до нього) більше однієї години - навіть у 12-часовий термін дійсного кешу -, nginx видалить його через inactive
параметр.
365d
і дійсний,1d
то nginx щорічно протягом року надсилатиме запити в кеш, навіть якщо ніхто не робить такий запит?