2016-11-14 96 views
0

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

可以说我有以下途径:

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

我不希望有一个全球性的速率限制/路由/ *而是针对每个路线。这在nginx中可能吗?

这样每条路由在一分钟内都有2个连接的连接限制。

我的想法是:/路由/后面的所有内容都应该充当一个id。每个ID都有自己的连接限制。

也许我会成为像服用点:

limit_conn_zone $request_uri zone=addr:10m; 

server { 
    ... 
    limit_conn addr 1; 
} 

但林不知道,如果这个工程,我期望的那样。

回答

1

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 ...关键。

+0

这看起来很不错...我会试试看。 – Eric