fastcgi_cache_lock
Директива 'fastcgi_cache_lock' контролирует поведение блокировки при операциях кэширования FastCGI, чтобы предотвратить одновременные запросы, приводящие к перегрузке при генерации кэша. — NGINX HTTP Core
Описание
Директива 'fastcgi_cache_lock' может использоваться для предотвращения одновременной генерации одинаковых ответов FastCGI несколькими запросами. При включении, если два или более запросов обращаются к одному и тому же кэшируемому ресурсу, только первый запрос будет продолжен для генерации upstream-ответа. Последующие запросы будут поставлены в очередь до тех пор, пока ответ не будет сгенерирован и помещён в кэш, после чего они смогут отдавать кэшированный ответ вместо отправки множества запросов к upstream. Директива принимает флаг ('on' или 'off'). При установке в 'on' NGINX применяет механизм блокировки, позволяя только одному запросу генерировать ответ, пока остальные ждут. Установка в 'off' отключает это поведение, в результате чего все запросы к одному и тому же ресурсу могут одновременно генерировать новые upstream-запросы, что может привести к повышенной нагрузке и проблемам с производительностью в условиях высокого трафика. Важно отметить, что использование 'fastcgi_cache_lock' может повысить эффективность в сценариях, где вероятны случаи одновременной генерации кэша, но это должно совмещаться с подходящей стратегией кэширования, чтобы обеспечить оптимальную производительность при максимальном использовании кэша.
Пример конфига
location /api {
fastcgi_pass 127.0.0.1:9000;
fastcgi_cache my_cache;
fastcgi_cache_lock on;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
}Включение блокировки кэша может привести к увеличению времени отклика для запросов в очереди, поэтому это следует протестировать под нагрузкой, чтобы подобрать оптимальные настройки.
Если 'fastcgi_cache_lock' включен, убедитесь, что настройки времени жизни кэша также настроены, иначе устаревшие ответы могут подаваться дольше, чем нужно.