×

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

  • 作者:新網(wǎng)
  • 來源:新網(wǎng)
  • 瀏覽:100
  • 2018-05-12 14:17:52

定義有兩個(gè)部分: zone= keyword標(biāo)識的區(qū)域名稱和冒號后面的大小。 大約16,000個(gè)IP地址的狀態(tài)信息需要1兆字節(jié),所以我們的區(qū)域可以存儲大約160,000個(gè)地址。 如果Nginx需要添加一個(gè)新條目時(shí),存儲空間將被耗盡,它將刪除最舊的條目。

 定義有兩個(gè)部分: zone= keyword標(biāo)識的區(qū)域名稱和冒號后面的大小。 大約16,000個(gè)IP地址的狀態(tài)信息需要1兆字節(jié),所以我們的區(qū)域可以存儲大約160,000個(gè)地址。 如果Nginx需要添加一個(gè)新條目時(shí),存儲空間將被耗盡,它將刪除最舊的條目。

timg.jpg

<div
如果釋放的空間不足以容納新記錄,則Nginx返回狀態(tài)碼503(Temporarily Unavailable) 。 此外,為了防止內(nèi)存耗盡,每當(dāng)Nginx創(chuàng)建一個(gè)新條目時(shí),最多可以刪除兩個(gè)在前60秒內(nèi)沒有使用的條目。
 
Rate - 設(shè)置最大請求率。 在這個(gè)例子中,速率不能超過每秒10個(gè)請求。 Nginx實(shí)際上以毫秒粒度跟蹤請求,所以這個(gè)限制對應(yīng)于每100毫秒1個(gè)請求。 由于我們不允許爆發(fā),這意味著如果請求在前一個(gè)允許的時(shí)間之后小于100毫秒時(shí)被拒絕。
 
limit_req_zone指令為速率限制和共享內(nèi)存區(qū)域設(shè)置參數(shù),但實(shí)際上并不限制請求速率。
 
因此,您需要通過在其中包含limit_req指令來將限制應(yīng)用于特定location或server塊。 在這個(gè)例子中,我們是對/login/的URI速率限制請求。
 
因此,現(xiàn)在每個(gè)唯一的IP地址被限制,/login/每秒10個(gè)請求 - 或者更確切地說,在前一個(gè)100毫秒內(nèi)不能請求該URL。
 
處理并發(fā)
 
如果我們在100毫秒內(nèi)得到兩個(gè)請求會怎么樣? 對于第二個(gè)請求,Nginx將狀態(tài)碼503返回給客戶端。 這可能不是我們想要的,因?yàn)閼?yīng)用程序本質(zhì)上是突發(fā)性的。
 
相反,我們想要緩沖任何多余的請求并及時(shí)提供服務(wù)。 這是我們使用burst參數(shù)limit_req ,在這個(gè)更新的配置:
 
burst參數(shù)定義了客戶端可以超過區(qū)域指定的速率(使用我們的示例mylimit區(qū)域,速率限制為每秒10個(gè)請求,或每100毫秒1個(gè))可以產(chǎn)生多少個(gè)請求。
 
在前一個(gè)請求到達(dá)100毫秒后的請求被放入一個(gè)隊(duì)列中,這里我們將隊(duì)列大小設(shè)置為20。
 
這意味著如果21個(gè)請求同時(shí)從一個(gè)給定的IP地址到達(dá),Nginx立即將第一個(gè)請求轉(zhuǎn)發(fā)到上游服務(wù)器組,并將剩下的20個(gè)放入隊(duì)列中。 然后,它每100毫秒轉(zhuǎn)發(fā)一個(gè)排隊(duì)的請求,并且只有當(dāng)傳入的請求使排隊(duì)請求的數(shù)量超過20時(shí)才返回503給客戶端。
 
無延遲隊(duì)列
 
具有burst的配置會導(dǎo)致流量暢通,但不是很實(shí)用,因?yàn)樗赡軙鼓?a href="/tag/29338" target="blank">網(wǎng)站顯得很慢。
 

免責(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)容,請發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

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

Loading