fastcgi_cache_lock

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

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

Описание

Директива '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' включен, убедитесь, что настройки времени жизни кэша также настроены, иначе устаревшие ответы могут подаваться дольше, чем нужно.