loop_detect_max_allow_loops
Директива `loop_detect_max_allow_loops` задаёт максимальное число допустимых циклов для запросов, чтобы предотвратить бесконечные циклы в конфигурациях CDN.
Описание
Директива loop_detect_max_allow_loops является частью NGINX ngx_http_loop_detect_module, который использует заголовок CDN-Loop для управления и обнаружения циклов запросов. Эта директива задаёт максимальное количество переходов, которое запрос может совершить через разные узлы CDN до того, как он будет признан зацикленным и заблокирован. Настроив эту директиву, администраторы могут защитить свои приложения от чрезмерного потребления ресурсов и возможных простоев сервиса из-за бесконечных циклов запросов.
Когда запрос проходит через CDN, каждый узел добавляет свой идентификатор в заголовок CDN-Loop. Каждый раз, когда запрос доходит до сервера с включённым обнаружением циклов, NGINX сравнивает текущее число переходов с указанным значением loop_detect_max_allow_loops. Если число превышает этот лимит, NGINX завершит запрос и вернёт заданный код состояния, сигнализируя, что максимально допустимое число циклов было превышено. Этот механизм особенно важен в сложных многослойных средах CDN, где циклы запросов могут приводить к неотзывчивым сервисам.
Пример конфига
http {
loop_detect on;
loop_detect_cdn_id my_cdn_id;
loop_detect_status 508;
loop_detect_max_allow_loops 5;
server {
listen 80;
server_name example.com;
location / {
proxy_set_header CDN-Loop $loop_detect_proxy_add_cdn_loop;
proxy_pass http://example.upstream.com;
}
}
}Установка слишком низкого значения может блокировать легитимные запросы, имеющие несколько hops, что потенциально ухудшит работу сервиса.
Убедитесь, что заголовок CDN-Loop корректно обрабатывается в ваших upstream-сервисах; в противном случае точное обнаружение циклов может быть невозможным.
Превышение максимально допустимого числа loops не вызовет повторной отправки запросов, что при некоторых условиях отказа может повлиять на производительность приложения.