Nginx:动态费率限制

时间:2016-11-14 09:59:34

标签: nginx rate-limiting

是否可以在nginx中使用动态连接限制?

假设我有以下路线:

/route/1
/route/2
...
/route/*

我不希望/ route / *具有全局速率限制,但是对于每个路由都是特定的。这可能在nginx中吗?

这样每条路线在一分钟内的连接限制为2个连接。

我的想法:/ route /之后的所有内容都应该充当id。每个id都有自己的连接限制。

也许我可能会像:

limit_conn_zone $request_uri zone=addr:10m;

server {
    ...
    limit_conn addr 1;
}

但是我不确定,如果这可以按照我的预期运作。

1 个答案:

答案 0 :(得分:2)

limit_conn可以在location块内使用。但limit_conn限制了同时连接的数量。如果您想限制费率,可以使用limit_req模块http://nginx.org/en/docs/http/ngx_http_limit_req_module.html,也可以在内部使用。

此外,如果您希望每个位置有单独的限制 - 有两种方法。首先 - 为每个位置分隔区域(limit_req_zone)。第二个 - 一个区域,但使用路线作为关键。第一种情况通常更好,因为内存使用,但在你的情况下(无限数量的路由)第二种方式更好。因此,只需从路由中提取您的ID并将其用作limit_req_zone密钥。

limit_req_zone $myid zone=one:50m rate=2r/m;
...
location ~ ^/route/(?<myid>\d+) {
    limit_req zone=one;
}

如果您需要为每个客户端IP地址的每个位置单独设置限制,请使用limit_req_zone $binary_remote_addr$myid ...密钥。