Api 对令牌使用NGINX速率限制
我需要将对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变量,如下所示: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=***** 有什么线索吗 谢谢 更新 我尝试创建区域: 限制要求区域
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个字符它不工作。