注意:
nginx 1.1.8 之后的版本的語(yǔ)法改為limit_conn_zone $binary_remote_addr zone=NAME:10m;
NAME 就是 zone 的名字詳情請(qǐng)看這里 http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
限制連接數(shù):
要限制連接,必須先有一個(gè)容器對(duì)連接進(jìn)行計(jì)數(shù),在http段加入如下代碼:
"zone=" 給它一個(gè)名字,可以隨便叫,這個(gè)名字要跟下面的 limit_conn 一致
$binary_remote_addr = 用二進(jìn)制來(lái)儲(chǔ)存客戶端的地址,1m 可以儲(chǔ)存 32000 個(gè)并發(fā)會(huì)話
... 省掉 N 字
1
2
3
|
http { limit_conn_zone $binary_remote_addr zone=addr:10m; |
接下來(lái)需要對(duì)server不同的位置(location段)進(jìn)行限速,比如限制每個(gè)IP并發(fā)連接數(shù)為1,則
1
2
3
4
5
6
7
8
|
server { listen 80; server_name 192.168.11.128; index index.html index.htm index.php; limit_conn addr 1; #是限制每個(gè)IP只能發(fā)起1個(gè)連接 (addr 要跟 limit_conn_zone 的變量對(duì)應(yīng)) limit_rate 100k; #限速為 100KB/秒 root html; |
注意事項(xiàng):
limit_rate 100k; //是對(duì)每個(gè)連接限速100k。這里是對(duì)連接限速,而不是對(duì)IP限速!如果一個(gè)IP允許兩個(gè)并發(fā)連接,那么這個(gè)IP就是限速limit_rate * 2
使用Nginx-limit-traffic-rate-module模塊
項(xiàng)目地址:https://github.com/bigplum/Nginx-limit-traffic-rate-module
ngx_http_limit_conn_module 模塊下的指令limit_conn指定每個(gè)給定鍵值的最大同時(shí)連接數(shù),limit_rate指令對(duì)每個(gè)連接的速率限制。參數(shù)rate的單位是字節(jié)/秒,設(shè)置為0將關(guān)閉限速。 按連接限速而不是按IP限制,因此如果某個(gè)客戶端同時(shí)開啟了兩個(gè)連接,那么客戶端的整體速率是這條指令設(shè)置值的2倍。如果是多線程的下載,limit_rate并不能限制總的速度。
Limit_traffic_rate模塊提供了一種方法,通過(guò)客戶端IP或下載URL來(lái)限制總的下載速度,即使有多個(gè)連接。
該限制方法如下所示:
1
2
3
4
5
6
7
8
9
10
|
http { #limit_traffic_rate_zone rate $request_uri 32m; limit_traffic_rate_zone rate $remote_addr 32m; server { location /download/ { limit_traffic_rate rate 20k; } } } |