Предположим, у меня есть этот файл конфигурации nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myCache:8m max_size=100m inactive=1h;
keys_zone=myCache:8m
значит? В документации об этом не так много сказано:Кроме того, все активные ключи и информация о данных хранятся в общей зоне памяти, имя и размер которой настраиваются параметром keys_zone.
Что если proxy_cache_valid
(12h
) выше указанного inactive
стоимость (1h
) в proxy_cache_path
? Какому правилу он будет следовать? например
proxy_cache_valid 200 302 12h;
proxy_cache_valid 404 302 1h;
Спасибо!
Что означает 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 часов valid-cache-period -, nginx будет удали это из-за inactive
параметр.