ajp_cache_lock
Директива ajp_cache_lock предотвращает одновременное проксирование нескольких запросов к одному и тому же URI на AJP сервер, снижая нагрузку и повторную обработку.
Описание
Директива ajp_cache_lock используется в модуле AJP (Apache Jserv Protocol) в NGINX для координации запросов к AJP-бэкенду. При включённой опции, если запрос для конкретного URI в данный момент обрабатывается, последующие идентичные запросы будут удерживаться до завершения первого запроса. Этот механизм блокировки помогает предотвратить чрезмерную нагрузку на AJP сервер, которая может возникнуть при большом числе параллельных запросов к одному и тому же ресурсу, что могло бы привести к избыточной обработке и увеличению задержек. Директива особенно полезна в сценариях с высоким трафиком, когда промахи кэша могут спровоцировать множество одновременных запросов, гарантируя, что бэкенд не будет перегружен обработкой дублирующих запросов.
Директива принимает флаг в качестве аргумента. Обычно он устанавливается в on или off: значение on включает поведение блокировки, а off — отключает его. Когда ajp_cache_lock установлен в on, NGINX гарантирует, что только один запрос с тем же ключом кэша будет передан на бэкенд, а параллельные запросы будут поставлены в очередь, что повышает эффективность и снижает конкуренцию за ресурсы на серверах бэкенда. Более того, если запрос завершается и получен успешный ответ, последующие запросы смогут сразу использовать кэшированный ответ, сокращая время отклика для пользователей, запрашивающих тот же ресурс после заполнения кэша.
Пример конфига
http {
upstream my_backend {
server 127.0.0.1:8009;
}
server {
listen 80;
location / {
ajp_pass my_backend;
ajp_cache_lock on;
}
}
}Убедитесь, что включение ajp_cache_lock не приводит к сильному накоплению запросов в очереди, что увеличивает задержку для конечных пользователей.
Проверьте, что ваш бэкенд-сервер AJP способен корректно обрабатывать блокировки запросов и не прерывает работу из-за превышения времени ожидания до завершения первого запроса.