loop_detect
`loop_detect` 指令启用对通过 NGINX 的请求的循环检测,利用 `CDN-Loop` 头来防止请求循环。
说明
loop_detect 指令属于 ngx_http_loop_detect_module,用于防止常见于 CDN 配置的请求循环。启用时,它会在 NGINX 内部启动机制来检查传入请求的 CDN-Loop 头,从而让服务器跟踪请求经过不同 CDN 节点的次数。此跟踪对于识别并防止在跨多个 CDN 节点处理请求时可能发生的无限循环至关重要。
该指令的参数为简单的 on/off 标志。当设置为 '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 已正确设置。