我需要将对API的访问限制为10个请求/秒。
这是我根据其文档使用的区域:
limit_req_zone $ binary_remote_addr zone = mylimit:10m rate = 10r / s;
此区域使用用户IP地址作为标识来评估使用限制。通常,人们使用相同的IP地址访问我们的系统。
我想知道是否可以使用用户tokenId作为速率限制的标识。我们的所有请求都在网址中包含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 "$1";
}
...
}
}
变量$tokenid
确实包含确切的令牌(经过测试,在响应中添加了一个标头),但它似乎没有更新limit_req_zone
使用的值。
答案 0 :(得分:2)
@TarunLalwani提出的建议确实有效。
我应该使用$arg_tokenID
而不是从URI中提取它并设置为变量。
最终的配置文件如下所示:
limit_req_zone "$arg_tokenID" zone=limit:10m rate=10r/s;
server {
...
limit_req zone=limit burst=10;
...
}