Что значит keys_zone = myCache: 8m?
Как сказала документация , Nginx будет держать все активные ключи и информацию о данных , которые хранятся в общей зоне памяти, которой name
и size
сконфигурированы параметром keys_zone. Для полноты давайте разбиваемся на части
/var/cache/nginx
это место, где хранится фактический кеш. Внутри папки кеш-файл представлял собой двоичный файл, но в нем можно легко найти html-тег.
levels=1:2
Параметр level устанавливает количество уровней подкаталогов в кэше.
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
и valid is1d
not, то nginx будет получать запросы в кэш каждый день в течение года, даже если никто не делает этот запрос?