如何限制 Nginx下載速率?
- 2019 年 12 月 4 日
- 筆記
默認情況下你的伺服器有多少網路頻寬(上行
),Nginx就能消耗掉多少,來者不拒。
假設你的服務商為你的伺服器提供 10Mbit/s
上下行對等的網路頻寬,你希望通過HTTP
方式從你的VPS伺服器下載2GB
的備份文件。
那麼你會得到大約 1.25MB/s
左右的下載速度(1Byte等於8Bit),這個下載速度確實很爽。
但是這帶來了另外一個問題,由於你下載文件佔用了VPS伺服器全部網路頻寬,那麼其他用戶將無法訪問你的伺服器,或者訪問速度非常緩慢。
你可以把上面的場景替換到公司某些業務上,這樣的結果是我們不能接受的,所以需要一種機制,它能夠限制每個HTTP連接所使用的最大速率(頻寬)。例如將示例中最大下載速度限制在 512KB/s
。
操作步驟
1. nginx配置文件
cat /etc/nginx/conf.d/default.conf server { #..其它配置項目省略 location /download { limit_rate 512k; } #..其它配置項目省略 }
還可以再優化一下,例如 前10MB 不限速,超過則開始限速。
server { #..其它配置項目省略 location /download { limit_rate_after 10240K; limit_rate 512k; } }
2. 重啟 nginx
nginx -t && nginx reload
3. 驗證

最大下載速度限制在 512KB/s
以內。
限速相關指令
1. limit_rate 指令
語法: limit_rate rate; 默認值: limit_rate 0; 使用欄位: http, server, location, if in location 功能: 該指令用於限制向客戶端傳輸數據的速度,單位是Byte/s每秒傳輸的位元組數,設置0禁用限制功能。
2. limit_rate_after 指令
語法: limit_rate_after size; 默認值: limit_rate_after 0; 使用欄位: http, server, location, if in location 功能: 該指令用於設置一個閥值,當達到條件(位元組)後開始限速。
注意事項
需要注意的是,上面的限制指令只是針對一個連接的設定,如果客戶端使用兩個連接(並發),那麼總速率將會是該指令設置值的兩倍。
不過nginx 提供了一個另外一個模組 ngx_http_limit_conn_module 用於限制連接數。
參考文檔
http://nginx.org/en/docs/http/ngx_http_core_module.html
http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
小結
最後來總結下文章中的知識點
limit_rate
指令用於配置限速功能,單位Byte/s
。- 配合
limit_rate_after
指令,可以在觸發規則後啟用限速功能。 - 限速功能只能限制單個HTTP連接,可以配合
限制連接數模組
使用。