proxy_cache_lock_age
Директива `proxy_cache_lock_age` устанавливает предел времени, в течение которого запрос должен ждать освобождения блокировки кэша перед возвратом ответа 504.
Описание
Директива proxy_cache_lock_age задаёт длительность, в течение которой запрос будет ждать кэшированного ответа от другого запроса, который в данный момент обрабатывается. Это помогает уменьшить количество одновременных запросов к одному и тому же ресурсу, позволяя только одному запросу заполнить кэш, в то время как остальные запросы либо ожидают ответа, либо получают кэшированный ответ, как только он становится доступен.
Когда запрос не находит данные в кэше, и другой запрос для того же содержимого уже обрабатывается, второй запрос будет ждать завершения первого запроса в течение времени, определённого proxy_cache_lock_age. Если первый запрос завершится в этот срок, ожидающий запрос получит кэшированный ответ. Если блокировка не будет снята в течение указанного времени, ожидающий запрос вернёт ошибку 504 Gateway Timeout. Правильная настройка этой директивы позволяет избежать лишней нагрузки на сервер при одновременных частых запросах к одному ресурсу и одновременно оптимизировать время отклика для пользователей.
Чтобы настроить proxy_cache_lock_age, просто определите эту директиву в контекстах http, server или location, указав желаемую длительность. Важно подобрать значение с учётом ожидаемой нагрузки и времени ответа, чтобы избежать возможных проблем с производительностью.
Пример конфига
location /api {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_lock on;
proxy_cache_lock_age 5s;
}Установка слишком малого значения age может привести к частым таймаутам, поскольку параллельные запросы могут не успевать завершиться достаточно быстро.
Если не включить proxy_cache_lock, эта директива не будет иметь эффекта, поскольку механизм блокировки кэша не активирован.