Nginx中如何设置limit_req限制内部重定向,避免递归重定向引发雪崩?

2026-05-07 12:570阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计719个文字,预计阅读时间需要3分钟。

Nginx中如何设置limit_req限制内部重定向,避免递归重定向引发雪崩?

请提供需要改写的伪原创开头内容,我将根据您的要求进行修改。

识别重定向行为的关键变量

内部重定向不会改变客户端 IP 或原始请求 URI,但会更新 $request_uri$uri。更可靠的方式是利用 nginx 内置变量标记“重定向深度”:

  • $request_length:虽不直接反映次数,但异常长的请求头(如反复添加自定义 header)可作为辅助线索
  • $sent_http_location:仅在返回 301/302 时存在,无法用于拦截内部重定向(它不触发响应头发送)
  • 推荐做法:用 map 构造自定义 key,例如:
    map $request_uri $redirect_depth {
      ~^/api/.*\?redirect=1$  1;
      ~^/api/.*\?redirect=2$  2;
      default 0;
    }

    再结合 limit_req_zone $redirect_depth zone=redir_check:1m rate=1r/s,对深度 ≥2 的请求强制限速

用 limit_req 拦截高频内部跳转

真正起作用的是把“可能引发递归的路径”单独圈出,并施加极严限流。

阅读全文
标签:Nginx

本文共计719个文字,预计阅读时间需要3分钟。

Nginx中如何设置limit_req限制内部重定向,避免递归重定向引发雪崩?

请提供需要改写的伪原创开头内容,我将根据您的要求进行修改。

识别重定向行为的关键变量

内部重定向不会改变客户端 IP 或原始请求 URI,但会更新 $request_uri$uri。更可靠的方式是利用 nginx 内置变量标记“重定向深度”:

  • $request_length:虽不直接反映次数,但异常长的请求头(如反复添加自定义 header)可作为辅助线索
  • $sent_http_location:仅在返回 301/302 时存在,无法用于拦截内部重定向(它不触发响应头发送)
  • 推荐做法:用 map 构造自定义 key,例如:
    map $request_uri $redirect_depth {
      ~^/api/.*\?redirect=1$  1;
      ~^/api/.*\?redirect=2$  2;
      default 0;
    }

    再结合 limit_req_zone $redirect_depth zone=redir_check:1m rate=1r/s,对深度 ≥2 的请求强制限速

用 limit_req 拦截高频内部跳转

真正起作用的是把“可能引发递归的路径”单独圈出,并施加极严限流。

阅读全文
标签:Nginx