溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

nginx如何請(qǐng)求連接限制筆記

發(fā)布時(shí)間:2021-06-29 09:49:57 來(lái)源:億速云 閱讀:133 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要介紹“nginx如何請(qǐng)求連接限制筆記”,在日常操作中,相信很多人在nginx如何請(qǐng)求連接限制筆記問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”nginx如何請(qǐng)求連接限制筆記”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

之前也有寫(xiě)過(guò)有關(guān)于爬蟲(chóng)的實(shí)戰(zhàn)練習(xí):go語(yǔ)言爬取珍愛(ài)網(wǎng)

當(dāng)時(shí)爬取時(shí)當(dāng)并發(fā)過(guò)大的時(shí)候,請(qǐng)求就會(huì)出現(xiàn)卡死的情況。其實(shí)這可能就是珍愛(ài)網(wǎng)對(duì)請(qǐng)求和連接進(jìn)行了限制。

爬蟲(chóng)和反爬是個(gè)“一邊攻,一邊守”的技術(shù),但我們親愛(ài)的爬蟲(chóng)工程師們也一直遵守著“只攻不破”的原則。網(wǎng)站服務(wù)器對(duì)爬蟲(chóng)一直在做限制,避免服務(wù)器流量異常,負(fù)載過(guò)大,防止惡意的攻擊帶來(lái)帶寬和資源的浪費(fèi),甚至影響業(yè)務(wù)正常運(yùn)行。往往辦法是限制對(duì)同一個(gè)IP的連接數(shù)和并發(fā)數(shù)進(jìn)行限制。今天我們就來(lái)看看nginx的連接頻率limit_conn_module和請(qǐng)求頻率limit_req_module 限制模塊。

HTTP請(qǐng)求建立在一次TCP連接基礎(chǔ)上,一次TCP請(qǐng)求至少產(chǎn)生一次HTTP請(qǐng)求。

連接限制:

語(yǔ)法如下:

Syntax:limit_conn_zone key zone=name:size;  
Default: -
Context:http

limit_conn_zone:一塊空間,用于存放被限制連接的狀態(tài);

key:鍵,可以說(shuō)是一個(gè)規(guī)則,就是對(duì)客服端連接的一個(gè)標(biāo)識(shí),比如可以用內(nèi)置變量 — 客戶(hù)端的ip;

zone:就是這塊空間的名字,這個(gè)需要和location的配置相對(duì)應(yīng);

size:就是申請(qǐng)空間的大小。

limit_conn指令:

Syntax: limit_conn zone number;
Default: -
Context: http, server, location

這里有個(gè)前提必須在http下先定義好limit_conn_zone才可以在這里引用。

這里的zone就是上面zone的名字,number就是同一時(shí)間連接的限制數(shù)。

請(qǐng)求頻率限制:

Syntax: limit_req_zone key zone=name:size rate=rate;
Default: -
Context: http

語(yǔ)法和上面類(lèi)似,rate為速率限制,以秒為單位多少個(gè)。

limit_req指令:

Syntax: limit_req zone=name [burst=number] [nodelay]
Default: -
Context: http,server,location

burst=number,重點(diǎn)說(shuō)明一下這個(gè)配置,burst爆發(fā)的意思,這個(gè)配置的意思是設(shè)置一個(gè)大小為number的緩沖區(qū)當(dāng)有大量請(qǐng)求(爆發(fā))過(guò)來(lái)時(shí),超過(guò)了訪問(wèn)頻次限制的請(qǐng)求可以先放到這個(gè)緩沖區(qū)內(nèi),起到訪問(wèn)限速的作用

nodelay,如果設(shè)置,超過(guò)訪問(wèn)頻次而且緩沖區(qū)也滿了的時(shí)候就會(huì)直接返回503(Service Temporarily Unavailable)服務(wù)暫時(shí)不可用,如果沒(méi)有設(shè)置,則所有請(qǐng)求會(huì)等待排隊(duì)。

這兩個(gè)默認(rèn)是不需要配置的。


配置示例如下:

nginx如何請(qǐng)求連接限制筆記

$binary_remote_addr表示二進(jìn)制的IP地址,一個(gè)二進(jìn)制的ip地址在32位機(jī)器上占用32個(gè)字節(jié),那么1M可以存放多少呢,計(jì)算一下,1x1024x1024/32 = 32768,意思就是可以存放32678個(gè)ip地址,在一個(gè)會(huì)話中,比$remote_addr要節(jié)約10空間;

rate=1r/s表示每秒只能有一個(gè)請(qǐng)求;

1、

把location下的limit配置都注釋掉,用ab工具(壓力測(cè)試工具)測(cè)試:

ab -n10000 -c1000 http://192.168.1.6/index.html

這里-n表示請(qǐng)求總數(shù),-c表示同一時(shí)間的請(qǐng)求數(shù)。

請(qǐng)求之后所有請(qǐng)求都成功:

nginx如何請(qǐng)求連接限制筆記

2、

當(dāng)只放開(kāi)limit_req zone=req_zone;注釋后,用壓測(cè)工具ab發(fā)起同樣的命令后:

nginx如何請(qǐng)求連接限制筆記

可以看到只成功請(qǐng)求3個(gè),因?yàn)閞eq_zone配置的rate為每秒一個(gè)請(qǐng)求。

3、

當(dāng)只放開(kāi)location下limit_req zone=req_zone burst=3 nodelay;注釋時(shí),繼續(xù)發(fā)起請(qǐng)求:

nginx如何請(qǐng)求連接限制筆記

可以看到,成功了6個(gè),比上一次多了3個(gè)。burst=3將3個(gè)請(qǐng)求放到緩沖區(qū)等下一秒執(zhí)行。

4、

當(dāng)只放開(kāi)limit_conn conn_zone 1;注釋時(shí),使用ab進(jìn)行測(cè)試。此時(shí)一個(gè)ip只能同一時(shí)刻只能建立一個(gè)連接。

到此,關(guān)于“nginx如何請(qǐng)求連接限制筆記”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI