簡體   English   中英

將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=***** ? 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM