【问题标题】:How to reset nginx rate limiting如何重置nginx速率限制
【发布时间】:2021-10-27 10:00:34
【问题描述】:

我使用limit_req_zonelimit_req 在 nginx 配置中成功实现了速率限制,如nginx blog 中所述

速率限制设置配置得非常严格。因此,如果我必须执行一些管理任务,有时会遇到速率限制。

所以我的问题是: 是否可以在不重新启动 nginx 进程的情况下以某种方式重置此速率限制?

重启 nginx-process 有效,但我在文档或网上没有找到其他解决方案。

【问题讨论】:

    标签: nginx rate-limiting


    【解决方案1】:

    为了实现你的目标,重置整个 memory_zone 并没有多大帮助,不是吗?但是对于 NGINX Plus,可以使用 NGINX Plus API 重置整个内存区域。

    http://nginx.org/en/docs/http/ngx_http_api_module.html#http_limit_reqs_http_limit_req_zone_name

    DELETE - 重置 HTTP limit_req 区域的统计信息 重置请求限制统计信息。

    NGINX API 模块仅通过商业订阅提供,不随 NGINX OSS 提供。

    如果您需要重置每个rate_key 或用户/客户端的速率限制,我强烈建议为此类任务/客户端定义一个标头/cookie/远程添加器,以便将此类客户端/任务排除在速率限制之外.

    例如。如果您已登录并发送 cookie,您可以验证 cookie 并将管理员排除在所有 URL 的速率限制之外。对于一些已知的远程地址也是如此。这是实现此类任务的常用方法,在您刚刚找到的博客中也有提及。

    如果这不符合您的要求,很高兴了解有关用例的更多信息。

    【讨论】:

      【解决方案2】:

      我相信为您的管理区域找到一个 url 位置模式确实会更好。在这种情况下,您可以定义另一个具有更高限制的速率限制,并为该特定 URL 设置它。像这样:

      limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
      limit_req_zone $binary_remote_addr zone=adminlimit:10m rate=30r/s;
      
      server {
          
          location ~* /admin/* {
              limit_req zone=adminlimit;
              
              ...
          }
      }
      

      【讨论】:

      • 感谢您的建议。问题是,如果合法用户必须每月做一次工作,有时他们会遇到速率限制......所以对于这个单一的用例,我还没有准备好提高某些 URL 的一般速率限制......所以重置是一种硬性要求。
      猜你喜欢
      • 1970-01-01
      • 2021-07-09
      • 2021-03-29
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      相关资源
      最近更新 更多