Api 对令牌使用NGINX速率限制

Api 对令牌使用NGINX速率限制,api,nginx,rate-limiting,Api,Nginx,Rate Limiting,我需要将对API的访问限制为每秒10个请求 这是我根据他们的文档使用的区域: 限制要求区域$binary远程添加区域=mylimit:10m速率=10r/s 此区域使用用户IP地址作为标识,对使用限制进行评级。通常,人们使用相同的IP地址访问我们的系统 我想知道是否可以使用用户令牌ID作为速率限制的标识。我们的所有请求在URL中都包含一个tokenID参数:www.example.com/api/events/?tokenID=***** 有什么线索吗 谢谢 更新 我尝试创建区域: 限制要求区域

我需要将对API的访问限制为每秒10个请求

这是我根据他们的文档使用的区域:

限制要求区域$binary远程添加区域=mylimit:10m速率=10r/s

此区域使用用户IP地址作为标识,对使用限制进行评级。通常,人们使用相同的IP地址访问我们的系统

我想知道是否可以使用用户令牌ID作为速率限制的标识。我们的所有请求在URL中都包含一个tokenID参数:www.example.com/api/events/?tokenID=*****

有什么线索吗

谢谢

更新

我尝试创建区域: 限制要求区域$tokenid区域=限制:10m速率=1r/s;1 r/s用于测试 并提取$tokenid变量,如下所示:

limit_req_zone "$tokenid" zone=limit:10m rate=1r/s;

server {
   ...

   location ~ \.php {
      ...
      if ($args ~* "tokenID=([^&]+)") {
          set $tokenid "$1";
      }
      ...
   }
}
limit_req_zone "$arg_tokenID" zone=limit:10m rate=10r/s;

server {
   ...
   limit_req zone=limit burst=10;
   ...
}

变量$tokenid确实包含测试的确切令牌,在响应中添加了一个头,但它似乎没有更新limit_req_zone使用的值。

@TarunLalwani提出的建议实际上有效

我应该使用$arg_tokenID,而不是从URI中提取它并将其设置为变量

最终的配置文件如下所示:

limit_req_zone "$tokenid" zone=limit:10m rate=1r/s;

server {
   ...

   location ~ \.php {
      ...
      if ($args ~* "tokenID=([^&]+)") {
          set $tokenid "$1";
      }
      ...
   }
}
limit_req_zone "$arg_tokenID" zone=limit:10m rate=10r/s;

server {
   ...
   limit_req zone=limit burst=10;
   ...
}

尝试使用$arg_tokenID而不是$token@TarunLalwani我尝试了几个参数,它工作得很好,但使用tokenID则不行。可能是因为它区分大小写吗?您的意思是令牌ID也可以是令牌ID吗?或者token的实际值在应用程序中是区分大小写的?@TarunLalwani我尝试了tokenID和tokenID,但两者都不起作用,但使用另一个参数,如action或其他任何参数,它起作用。PS:tokenID大约有64个字符,这会影响它吗?@TarunLalwani我在这里测试过它。大小确实会影响。我尝试使用4个字符的tokenID,它工作得很好,但是使用64个字符它不工作。