2016-11-14 92 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