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, кэш может продолжать расти без ограничений.

Связанные понятия

Полезные ресурсы