nginx:基于HTTP头的limit_req

3
我们提供一些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

这个问题几乎相同。

基于 HTTP 头部的 nginx 速率限制

2个回答

3

我找到了这种方法,它起作用了,但我仍不确定这个设置是否理想(看起来有点奇怪..)。如果您能给我任何建议,我将不胜感激。

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;
}

0

要在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;
     }
}

你的回答可以通过提供更多支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人能够确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接