154Nginx 運(yùn)維基礎(chǔ)入門--Nginx配置實(shí)戰(zhàn):流量及并發(fā)連接數(shù)限制

文件獲取
在這之前,我們需要先下載一個(gè) mp4 文件,供后面實(shí)驗(yàn)測(cè)試使用哦。
先建立一個(gè) Documents 目錄

mkdir Documents && cd Documents

再使用命令:

wget https://labfile.oss.aliyuncs.com/courses/95/seven.tar.gz
tar xzf seven.tar.gz
image.png

實(shí)現(xiàn)流量限制具體配置

編譯 Nginx
首先要清楚,我們的配置是基于 ngx_http_core_module 模塊的。要簡(jiǎn)單完成流量限制,我們必須做一點(diǎn)前期準(zhǔn)備。
我們剛才已經(jīng)在下載測(cè)試使用包,現(xiàn)在要做的,就是安裝 nginx,上幾章的講解已經(jīng)很詳細(xì)了,這里我們選擇源碼安裝。(前面的實(shí)驗(yàn)中我們已經(jīng)編譯安裝了)

cd /home/shiyanlou/
wget https://labfile.oss.aliyuncs.com/nginx-1.7.9.tar.gz

接下來就是解壓,編譯,安裝,前兩章著重講過,這里不再贅述。
下面我們就修改配置文件,前幾章我們講過對(duì)于 Nginx 來說,最重要的莫過于他自己的配置文件 nginx.conf。文件路徑為/usr/local/nginx/conf/nginx.conf,我們需要在 http 的 server 中加一個(gè) location,就好比之前我們做的簡(jiǎn)單的 echo 模塊,格式為:

location /剛下好的測(cè)試文件夾/ {
    root /剛才下載測(cè)試文件的目錄/;
    ...
    ...
    ...
}

相關(guān)指令
接下來就是調(diào)用命令實(shí)現(xiàn)流量限制。nginx 的模塊中早就寫好了對(duì)應(yīng)的命令,我們只需要調(diào)用就好。
實(shí)現(xiàn)流量限制由兩個(gè)指令 limit_rate 和 limit_rate_after 共同完成:
(1)limit_rate 指令
語(yǔ)法:

limit_rate rate;

默認(rèn)值:limit_rate 0;
作用域:http, server, location, if in location

命令概述:
限制向客戶端傳送響應(yīng)的速率限制。
參數(shù) rate 的單位是字節(jié)/秒,設(shè)置為 0 將關(guān)閉限速。
nginx 按連接限速,所以如果某個(gè)客戶端同時(shí)開啟了兩個(gè)連接,那么客戶端的整體速率是這條指令設(shè)置值的 2 倍。
(2)limit_rate_after 指令
語(yǔ)法:

limit_rate_after size;

默認(rèn)值:limit_rate_after 0;
作用域:http, server, location, if in location

命令概述:
設(shè)置不限速傳輸?shù)捻憫?yīng)大小。當(dāng)傳輸量大于此值時(shí),超出部分將限速傳送。

要是想了解更多,這里有更加詳細(xì)的命令信息: http://wiki.nginx.org/HttpCoreModule#limit_rate

具體配置
講了要使用的指令,我們接下來就實(shí)戰(zhàn)配置。
這是實(shí)驗(yàn)的具體配置(傳輸量限制為 3m,速率限制為 20k/s):

location /seven/{
                root /home/shiyanlou/Documents;
                limit_rate_after 3m;
                limit_rate 20k;
}

代碼截圖如下:


image.png

配置完以后記得重新啟動(dòng) Nginx(注意這是編譯安裝的)

cd /home/shiyanlou/nginx-1.7.9/objs
sudo ./nginx

配置之前與配置之后的測(cè)試
接下來就是測(cè)試

cd /home/shiyanlou/
wget http://本機(jī)地址/seven/seven.mp4

本機(jī)地址用 ifconfig 來查看

修改配置之前,速率沒有限制:


image.png

修改配置之后,可見由于傳輸量大于 3M,超出部分的傳輸速率已經(jīng)被限制在 20k/s:


image.png

也許你已經(jīng)發(fā)現(xiàn)配置之后剛開始的一段時(shí)間內(nèi)傳輸速度很高,因?yàn)?,傳輸量大于設(shè)定值的部分才會(huì)受到限制。這就說明,我們兩個(gè)命令都發(fā)揮了作用,這也就完成了我們第一個(gè)實(shí)戰(zhàn)。

實(shí)現(xiàn)并發(fā)連接數(shù)限制的具體配置

相關(guān)指令
這個(gè)的配置是基于 ngx_http_limit_zone_module 模塊的,要簡(jiǎn)單完成并發(fā)限制,我們要涉及到 limit_conn_zone 和 limit_conn 這兩個(gè)指令:
(1)limit_conn_zone 指令
語(yǔ)法: limit_conn_zone zone_name $variable the_size
默認(rèn)值: no
作用域: http
本指令定義了一個(gè)數(shù)據(jù)區(qū),里面記錄會(huì)話狀態(tài)信息。 variable 定義判斷會(huì)話的變量;the_size 定義記錄區(qū)的總?cè)萘俊?br> (2)limit_conn 指令
語(yǔ)法: limit_conn zone_name the_size
默認(rèn)值: no
作用域: http,server,location

指令概述:
指定一個(gè)會(huì)話最大的并發(fā)連接數(shù)。 當(dāng)超過指定的最發(fā)并發(fā)連接數(shù)時(shí),服務(wù)器將返回 "Service unavailable" (503)。
配置示例:

http {
    limit_conn_zone  $binary_remote_addr  zone=one:10m;
    ...
    server {
        ...
        location /seven/ {
            limit_conn   one  1;
            .....
        }
    }
    ...
}
...

limit_conn_zone binary_remote_addr zone=one:10m; 定義一個(gè)叫 one 的記錄區(qū),總?cè)萘繛?10M。 以變量binary_remote_addr 作為會(huì)話的判斷基準(zhǔn)(即一個(gè)地址一個(gè)會(huì)話)。

你可以注意到,在這里使用的是 binary_remote_addr 而不是remote_addr。remote_addr 的長(zhǎng)度為 7 至 15 bytes,會(huì)話信息的長(zhǎng)度為 32 或 64 bytes。 而binary_remote_addr 的長(zhǎng)度為 4 bytes,會(huì)話信息的長(zhǎng)度為 32 bytes。
當(dāng) zone 的大小為 1M 的時(shí)候,大約可以記錄 32000 個(gè)會(huì)話信息(一個(gè)會(huì)話占用 32 bytes)。

limit_conn one 1;
限制 /seven/ 目錄下,一個(gè)會(huì)話只能進(jìn)行一個(gè)連接。 簡(jiǎn)單點(diǎn),就是限制 /seven/ 目錄下,一個(gè) IP 只能發(fā)起一個(gè)連接,多過一個(gè),一律 503。

由于環(huán)境的原因這里沒有辦法測(cè)試只是讓大家了解,限制并發(fā)連接數(shù) Nginx 的對(duì)應(yīng)模塊的配置,如果大家有需要,可以進(jìn)一步參照 http://wiki.nginx.org/HttpLimitZoneModule 這里有更詳細(xì)的講解。

實(shí)驗(yàn)總結(jié)

如果提示 404 not found 怎么處理
404 not found 表明文件沒有找到,你看看 seven.mp4 是放在哪的
如果你的配置文件是這樣寫的話

        location /seven/{
            root /home/shiyanlou/Documents;
            limit_rate_after 3m;
            limit_rate 10k;
        }

wget 是這樣

wget http://localhost/seven/seven.mp4

那么當(dāng)你訪問seven/,nginx以/home/shiyanlou/Documents作為根目錄去尋找seven/seven.mp4
所以 mp4 文件應(yīng)該存放在 /home/shiyanlou/Documents/seven/seven.mp4
在這一節(jié)中,我們了解到要想實(shí)現(xiàn)流量及并發(fā)連接數(shù)限制,我們只需要清楚必須對(duì)應(yīng)哪些模塊,添加哪些命令,而這些命令早就已經(jīng)寫好。我們只需調(diào)用,如果有必要再深究這些命令的的實(shí)現(xiàn)方法。
練習(xí)
按照所給步驟實(shí)現(xiàn)流量限制。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容