proxy_cache_path
Тема дорожной карты · Nginx
Директива proxy_cache_path определяет расположение в файловой системе и операционные параметры кэш-зоны обратного прокси Nginx. Она позволяет Nginx хранить ответы upstream на диске и обслуживать последующие идентичные запросы напрямую без обращения к бэкенду. Это значительно снижает нагрузку на серверы backend и ускоряет время ответа для пользователей. Ключевым аспектом является управление размером кэша и его активностью, что предотвращает переполнение памяти и улучшает производительность.
Как это работает
Директива proxy_cache_path позволяет настроить кэширование ответов upstream на уровне Nginx. Пример использования выглядит так: proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off. Здесь levels задает глубину дерева директорий для предотвращения исчерпания inode, keys_zone определяет зону разделяемой памяти для хранения ключей и метаданных кэша, max_size ограничивает общий объем используемого диска, а inactive определяет время хранения кэша после последнего доступа.
Активация кэша происходит через директиву proxy_cache внутри блока location, например: proxy_cache my_cache;. Поведение кэширования регулируется дополнительными директивами, такими как proxy_cache_valid, proxy_cache_use_stale и proxy_cache_bypass.
Когда применять
proxy_cache следует использовать для медленных upstream-ответов, где staleness секунд-минут допустим. Это особенно полезно для рендеринга страниц, поиска результатов или выполнения дорогостоящих вычислений. При использовании proxy_cache_lock on; можно предотвратить "шторм кэша", гарантируя, что только один запрос получает ресурс от upstream, пока последующие ожидают кэшированного ответа.
Директива proxy_cache_use_stale позволяет использовать stale-контент во время сбоев backend, что улучшает устойчивость системы. Для управления кэшированием браузеров и CDN используются заголовки Cache-Control, такие как public, max-age=....
Типичные ошибки
Типичные ошибки при использовании proxy_cache_path включают кеширование аутентифицированных ответов, что может привести к ситуации, когда один пользователь видит данные другого. Для предотвращения этого, следует использовать директиву vary или skip_cache для залогиненных пользователей. Также следует избегать использования слишком большого размера для keys_zone, так как это может привести к медленной работе и нестабильности системы. Если не задано значение inactive, кэш может продолжать расти без ограничений.