[英]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=*****
? tokenID
。
有什么線索嗎?
謝謝。
UPDATE
我嘗試創建區域: 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
使用的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;
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.