×

Nginx服務(wù)器限速功能(一)

  • 作者:新網(wǎng)
  • 來(lái)源:新網(wǎng)
  • 瀏覽:100
  • 2018-05-12 14:23:30

我們都知道Nginx服務(wù)器有一個(gè)十分有用的限速功能,但是它卻常常被錯(cuò)誤配置。今天我們就來(lái)聊一聊它的限速功能。 這個(gè)功能用來(lái)限制用戶在某此時(shí)間段內(nèi)請(qǐng)求的的HTTP請(qǐng)求數(shù),此請(qǐng)求應(yīng)該是 GET 或POST 來(lái)發(fā)出的請(qǐng)求。

 我們都知道Nginx服務(wù)器有一個(gè)十分有用的限速功能,但是它卻常常被錯(cuò)誤配置。今天我們就來(lái)聊一聊它的限速功能。

002UASMrzy7605pjKJv15&690.jpg

<div
這個(gè)功能用來(lái)限制用戶在某此時(shí)間段內(nèi)請(qǐng)求的的HTTP請(qǐng)求數(shù),此請(qǐng)求應(yīng)該是 GET 或POST 來(lái)發(fā)出的請(qǐng)求。
 
這個(gè)限速功能常常被應(yīng)用于網(wǎng)絡(luò)安全方面。比如減慢暴力密碼破解的攻擊,爬蟲(chóng)對(duì)網(wǎng)頁(yè)的抓取,防止DDOS攻擊等。通過(guò)它來(lái)限制和過(guò)濾為為真實(shí)用戶的標(biāo)準(zhǔn)數(shù)值,它會(huì)把來(lái)源URL等信息寫(xiě)到系統(tǒng)日志中。更確切地說(shuō),這個(gè)功能常用于提供極少量的應(yīng)用服務(wù)器,用戶訪問(wèn)量不多,但卻常常癱瘓的問(wèn)題。
 
在本文中,我們將詳細(xì)介紹Nginx的速率限制基礎(chǔ)及更高級(jí)的配置。值得一提的是,Nginx限速的工作原理與Nginx Plus相同。
 
Nginx限速是怎樣工作的
 
Nginx限速使用 Leaky(唝水桶)算法,比喻為水桶頂部倒水,底部漏水,如果倒入水的速率超過(guò)漏水的速度,則水桶漏出。在電信網(wǎng)絡(luò)和分組交換網(wǎng)絡(luò)中,帶寬有限的情況下該算法使用場(chǎng)景較多。
 
就請(qǐng)求處理而言,水代表客戶端的請(qǐng)求,存水的桶按先進(jìn)先出(FIFO)調(diào)度算法處理的隊(duì)列。漏出的水表示退出緩沖區(qū)等服務(wù)器處理,而溢出表示請(qǐng)被丟棄且不再提供服務(wù)。
 
配置基本的速率限制
 
速率限制主要有2個(gè)主要指令,limit_req_zone和limit_req。如下代碼:
 
limit_req_zone指令定義了速度限制的參數(shù),同時(shí)在出現(xiàn)的上下文中啟用速率限制。(在本例中是針對(duì)于 /login/ URI的所有請(qǐng)求)
 
limit_requ_zone 指令通常定義在HTTP塊中,這樣可以用于多個(gè)上下文。它包含3個(gè)參數(shù):
 
Key - 定義應(yīng)用限制的請(qǐng)求特征。 在這個(gè)例子中,它是Nginx變量$binary_remote_addr ,它保存著客戶端IP地址的二進(jìn)制表示。 這意味著我們將每個(gè)唯一的IP地址限制為由第三個(gè)參數(shù)定義的請(qǐng)求速率(我們使用這個(gè)變量,因?yàn)樗瓤蛻舳薎P地址的字符串表示$remote_addr占用更少的空間)。
 
Zone - 定義用于存儲(chǔ)每個(gè)IP地址狀態(tài)的共享內(nèi)存區(qū)域以及訪問(wèn)請(qǐng)求受限URL的頻率。 將信息保存在共享內(nèi)存中意味著它可以在Nginx工作進(jìn)程之間共享。
 

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費(fèi)咨詢獲取折扣

Loading