scgi_cache_lock_age
Директива `scgi_cache_lock_age` контролирует продолжительность, в течение которой запрос будет удерживать блокировку записи кэша для ответов SCGI. — NGINX HTTP Core
Описание
Директива `scgi_cache_lock_age` в NGINX является важным параметром в контексте кэширования ответов SCGI. Когда выполняется запрос к SCGI-бэкенду и происходит промах кэша, NGINX попытается сохранить ответ этого запроса в кэше для последующих идентичных запросов. Чтобы предотвратить ситуацию, когда несколько процессов создают дублирующие SCGI-запросы, пока исходный запрос всё ещё обрабатывается, эта директива задаёт, как долго (в секундах) должна удерживаться блокировка кэша до тех пор, пока ответ не будет получен и сохранён в кэше. Установив этот параметр времени, вы фактически контролируете конкурентность запросов к одной и той же записи кэша, обеспечивая, что для конкретной записи кэша обрабатывается только один запрос до тех пор, пока не станет доступен ответ. Типичный сценарий использования `scgi_cache_lock_age` — это предотвращение проблемы одновременных запросов (thundering herd), когда множество запросов сервера приводит к перегрузке бэкенда. Блокируя запись кэша от обработки несколькими одновременными запросами до завершения первого, NGINX помогает смягчить возможные проблемы с нагрузкой и повышает общую эффективность ответов. Параметр принимает продолжительность, указанную в секундах, и его значение следует тщательно подбирать в зависимости от нагрузки сервера и ожидаемых шаблонов запросов, чтобы оптимизировать производительность при эффективном управлении использованием ресурсов.
Пример конфига
location /api {
scgi_pass backend;
scgi_cache my_cache;
scgi_cache_lock on;
scgi_cache_lock_age 10s;
}Если `scgi_cache_lock` отключен, директива `scgi_cache_lock_age` не будет иметь никакого эффекта.
Для эффективности эта директива должна использоваться совместно с директивами кэширования.
Неправильная настройка может привести к ненужному ожиданию завершения других запросов перед ответом.