对令牌使用 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;
...
}
我需要将对我们 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;
...
}