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