proxy_cache_lock_timeout
Задает таймаут на получение блокировки для кэшированного прокси-ответа.
Описание
Директива proxy_cache_lock_timeout используется для указания максимального времени, в течение которого NGINX будет ждать получения блокировки для ответа, сохранённого в кэше. Эта директива полезна в ситуациях, когда несколько запросов одновременно пытаются получить один и тот же контент. Используя блокировку, NGINX может сериализовать такие запросы, выполнив бэкенд-запрос только один раз, в то время как остальные запросы будут ожидать, пока ответ не будет помещён в кэш. Такое поведение помогает снизить нагрузку на upstream‑серверы и улучшить общую производительность.
Значение для proxy_cache_lock_timeout задаётся в формате времени, например 10s для 10 секунд, и может быть установлено в 0, чтобы отключить блокировку. Когда запрос приводит к промаху в кэше, если блокировка доступна, запрос продолжит получение содержимого с upstream‑сервера. Если блокировка удерживается другим запросом и время ожидания превышает указанное значение, новый запрос вернёт ошибку 502 вместо бесконечного ожидания.
Директиву можно объявлять в контекстах http, server и location, что обеспечивает гибкость конфигураций, где кэширование требуется на более детальном уровне. Важно тщательно выбирать значение таймаута исходя из времени отклика приложения и ожидаемых паттернов трафика, чтобы избежать ненужных сбоев запросов.
Пример конфига
location /api {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_lock on;
proxy_cache_lock_timeout 10s;
}Установка слишком малого времени ожидания может привести к увеличению числа ошибок 502 Bad Gateway, если upstream‑сервер медленно отвечает.
Для корректной работы механизма блокировки убедитесь, что proxy_cache_lock включён.