loop_detect

Директива `loop_detect` включает обнаружение петель для запросов, проходящих через NGINX, используя заголовок CDN-Loop для предотвращения циклических обращений.

Синтаксисloop_detect on | off;
По умолчаниюoff
Контекстhttp, server, location
Аргументыflag

Описание

Директива loop_detect является частью ngx_http_loop_detect_module, разработанного для предотвращения петель запросов, часто связанных с конфигурациями CDN. При включении она активирует механизмы в NGINX для проверки заголовка CDN-Loop входящих запросов, что позволяет серверу отслеживать, сколько раз запрос прошёл через различные узлы CDN. Это отслеживание необходимо для выявления и предотвращения бесконечных циклов, которые могут возникать при обработке запросов через несколько узлов CDN.

Директива принимает простой параметр-флаг включения/выключения. Когда значение установлено в 'on', NGINX начнёт подсчёт переходов, записанных в заголовке CDN-Loop. Если число переходов превысит настроенный предел (установленный с помощью loop_detect_max_allow_loops), запрос будет заблокирован, и клиенту будет возвращён конкретный HTTP-код состояния (определяемый параметром loop_detect_status). Такой механизм важен для поддержания оптимальной производительности сервера и предотвращения перегрузки сервера ошибочными запросами или возникновения непреднамеренного циклического поведения в сети.

Директива может быть определена в разных контекстах, а именно в блоках http, server или location, что обеспечивает гибкость в зависимости от конкретных потребностей вашего приложения. Необходимо правильно настроить эту директиву вместе с сопутствующими директивами, такими как loop_detect_cdn_id и loop_detect_max_allow_loops, чтобы адаптировать функциональность обнаружения петель под требования вашей инфраструктуры.

Пример конфига

http {
    loop_detect on;
    loop_detect_cdn_id my_cdn_id;
    loop_detect_status 508;
    loop_detect_max_allow_loops 10;

    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;
        }
    }
}

Убедитесь, что заголовок CDN-Loop правильно отформатирован и содержит корректную информацию, чтобы избежать непреднамеренной блокировки запросов.

Установка loop_detect_max_allow_loops слишком низкого значения может привести к ошибочной блокировке корректных запросов, особенно в сложных конфигурациях CDN.

Неправильная настройка связанных директив может привести к неэффективному обнаружению циклов. Убедитесь, что loop_detect_cdn_id и loop_detect_status заданы соответствующим образом.

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