scgi_cache_lock

Директива 'scgi_cache_lock' управляет применением блокировки, когда запрос к кэшированному SCGI-ответу обрабатывается одновременно несколькими процессами. — NGINX HTTP Core

scgi_cache_lock
httpserverlocation
Синтаксисscgi_cache_lock on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core
Аргументыflag

Описание

Директива 'scgi_cache_lock' в NGINX включает или отключает блокировку запросов при регенерации записи в кэше. Это означает, что если один процесс уже формирует ответ для запроса, отсутствующего в кеше, последующие запросы к тому же ресурсу должны ждать завершения первого, что позволяет избежать одновременного выполнения нескольких процессов генерации. Блокировка гарантирует, что только один процесс одновременно обновляет кэш, повышая целостность кэша и улучшая пользовательский опыт за счёт уменьшения нагрузки на серверы бэкенда. Если блокировка включена и поступает параллельный запрос в то время, когда ответ генерируется, новые запросы будут ждать готовности ответа вместо прямого обращения к бэкенду. Директива принимает в качестве аргумента флаг, обычно 'on' или 'off'. По умолчанию, если не указано, поведение блокировки будет 'off', то есть несколько запросов могут привести к одновременному выполнению нескольких обращений к бэкенду, что потенциально может привести к повышенной нагрузке на бэкенд или нестабильности времени ответа. Пользователям следует внимательно оценивать требования их приложения к параллельности при решении о включении этой директивы.

Пример конфига

http {
    scgi_cache_path /path/to/cache levels=1:2 keys_zone=my_zone:10m;
    location /scgi {
        scgi_pass backend;
        scgi_cache my_zone;
        scgi_cache_lock on; 
    }
}

Использование 'scgi_cache_lock on' может увеличить время отклика для пользователей при большом количестве одновременных запросов, поскольку они будут ожидать завершения первого ответа.

Блокировку следует использовать с осторожностью, так как её включение может привести к задержкам в ответах, если обработка на бэкенде медленная.