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

将值设置得非常低可能会阻止具有若干跳数的合法请求,从而可能导致服务性能下降。

确保在上游服务中正确管理 CDN-Loop 头部;否则可能无法进行准确的循环检测。

超过允许的最大循环次数将不会重试请求,在某些故障情况下可能影响应用性能。

← 返回所有指令