2017-10-05 78 views
0

我需要限制訪問我們的API到10個請求/秒。使用NGINX速率限制與標記

這是我根據他們的文檔使用區域:

limit_req_zone $ binary_remote_addr區= mylimit:10M速率= 10R/S;

此區域使用用戶IP地址作爲標識來評估使用限制。通常,人們使用相同的IP地址訪問我們的系統。

我想知道是否有可能使用用戶tokenId作爲速率限制的標識。我們的所有請求都包含URL中的tokenID參數:www.example.com/api/events/?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使用的值。

+2

嘗試使用'$ arg_tokenID',而不是'$ token' –

+0

@TarunLalwani我有幾個參數嘗試,它的作品完美,但與'tokenID'它不「T。難道是因爲它區分大小寫嗎? –

+0

你的意思是'tokenID'也可以是'tokenid'嗎?或者令牌的實際值在應用程序中不敏感? –

回答

1

@TarunLalwani提出的建議確實有效。

我應該使用$arg_tokenID而不是從URI中提取它並設置爲一個變量。

最終的配置文件看起來是這樣的:

limit_req_zone "$arg_tokenID" zone=limit:10m rate=10r/s; 

server { 
    ... 
    limit_req zone=limit burst=10; 
    ... 
}