loop_detect
Директива `loop_detect` включает обнаружение петель для запросов, проходящих через NGINX, используя заголовок CDN-Loop для предотвращения циклических обращений.
Описание
Директива 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 заданы соответствующим образом.