nginx:limit_req基于http头

时间:2016-06-17 08:57:26

标签: nginx

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

1 个答案:

答案 0 :(得分:1)

我找到了这种方式并且它有效但仍然不确定这个设置是否理想(看起来很奇怪......)。我很感激你能给我任何建议。

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