是否可以在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;
}
但是我不确定,如果这可以按照我的预期运作。
答案 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 ...
密钥。