注意:
nginx 1.1.8 之后的版本的語法改為limit_conn_zone $binary_remote_addr zone=NAME:10m;
NAME 就是 zone 的名字詳情請看這里 http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
限制連接數:
要限制連接,必須先有一個容器對連接進行計數,在http段加入如下代碼:
"zone=" 給它一個名字,可以隨便叫,這個名字要跟下面的 limit_conn 一致
$binary_remote_addr = 用二進制來儲存客戶端的地址,1m 可以儲存 32000 個并發會話
... 省掉 N 字
1
2
3
|
http { limit_conn_zone $binary_remote_addr zone=addr:10m; |
接下來需要對server不同的位置(location段)進行限速,比如限制每個IP并發連接數為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; #是限制每個IP只能發起1個連接 (addr 要跟 limit_conn_zone 的變量對應) limit_rate 100k; #限速為 100KB/秒 root html; |
注意事項:
limit_rate 100k; //是對每個連接限速100k。這里是對連接限速,而不是對IP限速!如果一個IP允許兩個并發連接,那么這個IP就是限速limit_rate * 2
使用Nginx-limit-traffic-rate-module模塊
項目地址:https://github.com/bigplum/Nginx-limit-traffic-rate-module
ngx_http_limit_conn_module 模塊下的指令limit_conn指定每個給定鍵值的最大同時連接數,limit_rate指令對每個連接的速率限制。參數rate的單位是字節/秒,設置為0將關閉限速。 按連接限速而不是按IP限制,因此如果某個客戶端同時開啟了兩個連接,那么客戶端的整體速率是這條指令設置值的2倍。如果是多線程的下載,limit_rate并不能限制總的速度。
Limit_traffic_rate模塊提供了一種方法,通過客戶端IP或下載URL來限制總的下載速度,即使有多個連接。
該限制方法如下所示:
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; } } } |