loop_detect_max_allow_loops

Директива `loop_detect_max_allow_loops` задаёт максимальное число допустимых циклов для запросов, чтобы предотвратить бесконечные циклы в конфигурациях CDN.

Синтаксисloop_detect_max_allow_loops number;
По умолчанию10
Контекстhttp, server, location
Аргументы1

Описание

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

← Ко всем директивам