scgi_cache_lock
Директива 'scgi_cache_lock' управляет применением блокировки, когда запрос к кэшированному SCGI-ответу обрабатывается одновременно несколькими процессами. — NGINX HTTP Core
Описание
Директива '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' может увеличить время отклика для пользователей при большом количестве одновременных запросов, поскольку они будут ожидать завершения первого ответа.
Блокировку следует использовать с осторожностью, так как её включение может привести к задержкам в ответах, если обработка на бэкенде медленная.