proxy_cache_lock
Директива `proxy_cache_lock` включает сериализацию запросов к одному и тому же ресурсу при отсутствии его в кэше, чтобы снизить нагрузку на вышестоящий сервер.
Описание
Когда proxy_cache_lock установлен в on, NGINX будет использовать механизм блокировки, чтобы предотвратить отправку нескольких одновременно выполняющихся запросов к вышестоящему серверу для одного и того же ресурса, отсутствующего в кэше. Вместо этого первый пришедший запрос получит ресурс, а последующие будут ждать завершения первого запроса, чтобы затем обслуживать содержимое из кэша, как только оно станет доступно.
Эта директива особенно полезна для повышения производительности и эффективности веб‑приложений, которые зависят от бэкенд‑сервисов, особенно в сценариях, когда промахи кэша могут привести к резкому всплеску запросов к вышестоящим серверам. Включив proxy_cache_lock, NGINX минимизирует нагрузку на бэкенд‑серверы и снижает вероятность их перегрузки повторными запросами к одному и тому же ресурсу.
Эту директиву можно использовать в контекстах http, server или location. Установка этой опции в on критична в условиях высокого трафика, где кэширование имеет решающее значение для производительности и управления ресурсами.
Пример конфига
http {
proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m max_size=1g;
server {
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_lock on;
}
}
}Включение proxy_cache_lock может привести к задержкам при последующих запросах, пока не завершится первый запрос.
Эту директиву следует использовать с осторожностью при низких настройках TTL (Time-To-Live) кэша, так как это может привести к увеличению времени ожидания в условиях высокого трафика.