如何限制 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連接,可以配合限制連接數模組使用。