nginx:limit_req基于http header

bmvo0sr5  于 2023-08-03  发布在  Nginx
关注(0)|答案(2)|浏览(119)

我们提供了一些JSON Web API。用户可以在我们的网页上创建API密钥,然后使用该密钥作为HTTP头属性。但是,我们将允许在没有密钥的情况下访问试用。在这种情况下,我们如何设置nginx配置?

sample request

curl  -H 'x-api-key:xxxx' https://api.xxx.com/xxx

字符串
我们需要同时设置(1)和(2)

(1) Without 'x-api-key' http header -> limit_req setting (e.g 10 request per sec)

(2) With 'x-api-key' http header -> no limitation.


更新1
这几乎是同一个问题。
Rate limit in nginx based on http header

ttisahbt

ttisahbt1#

我发现了这种方式,它的工作,但仍然不确定这个设置是不是理想的(看起来很奇怪…)。如果你能给予我任何建议,我将不胜感激。

map $http_x_api_key $limit {
    ""     $binary_remote_addr;
    default     ""; 
}

limit_req_zone $limit zone=limit_req_by_ip:10m rate=1r/s;
limit_req_log_level error;
limit_req_status 503;

location / {
    limit_req zone=limit_req_by_ip burst=10 nodelay;
}

字符串

vqlkdk9b

vqlkdk9b2#

为了在Nginx中基于HTTP头设置速率限制,您可以使用$http_example_header变量。在你的情况下,你可以有这样的东西:

limit_req_zone $http_x_api_key zone=example_zone:10m rate=10r/s;

server {
     listen 80;

     location /xxx {
          limit_req zone=example_zone;
          limit_req_status 429;
     }
}

字符串

相关问题