对令牌使用 NGINX 速率限制

Use NGINX Rate Limiting with tokens

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

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

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

本区使用用户IP地址作为标识来评定使用限额。通常,人们使用相同的 IP 地址访问我们的系统。

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

有什么线索吗?

谢谢。

更新

我尝试创建区域: limit_req_zone "$tokenid" zone=limit:10m rate=1r/s;(1 r/s 用于测试) 并像这样提取 $tokenid 变量:

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

server {
   ...

   location ~ \.php {
      ...
      if ($args ~* "tokenID=([^&]+)") {
          set $tokenid "";
      }
      ...
   }
}

变量 $tokenid 确实包含确切的标记(测试添加 header 到响应),但它似乎没有更新 limit_req_zone 使用的值。

@TarunLalwani 的建议确实有效。

我应该使用 $arg_tokenID 而不是从 URI 中提取它并设置到变量中。

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

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

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