nginx服務(wù)器請(qǐng)求限制模塊(ngx_http_limit_req_module)

nginx 可以使用ngx_http_limit_req對(duì)服務(wù)器資源請(qǐng)求進(jìn)行限制,這對(duì)使用ab等工具惡意壓測(cè)服務(wù)器和cc(challenge Collapsar)會(huì)有一定的防范作用。
該模塊使用漏斗算法(Leaky Bucket),該算法有兩種處理方式Traffic Shaping和Traffic Policing

在桶滿水之后,常見的兩種處理方式為:
1.暫時(shí)攔截住上方水的向下流動(dòng),等待桶中的一部分水漏走后,再放行上方水。
2.溢出的上方水直接拋棄。

將水看作網(wǎng)絡(luò)通信中數(shù)據(jù)包的抽象,則方式1起到的效果稱為Traffic Shaping,方式2起到的效果稱為Traffic Policing
由此可見,Traffic Shaping的核心理念是"等待",Traffic Policing的核心理念是"丟棄"。它們是兩種常見的流速控制方法

nginx中該模塊的使用配置示例

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
 
server {
    location /search/ {
        limit_req zone=one burst=5 nodelay;
    }

第一段配置

第一個(gè)參數(shù):$binary_remote_addr 表示通過remote_addr這個(gè)標(biāo)識(shí)來做限制,“binary_”的目的是縮寫內(nèi)存占用量,是限制同一客戶端ip地址
第二個(gè)參數(shù):zone=one:10m表示生成一個(gè)大小為10M,名字為one的內(nèi)存區(qū)域,用來存儲(chǔ)訪問的頻次信息
第三個(gè)參數(shù):rate=1r/s表示允許相同標(biāo)識(shí)的客戶端的訪問頻次,這里限制的是每秒1次,還可以有比如30r/m的

第二段配置

第一個(gè)參數(shù):zone=one 設(shè)置使用哪個(gè)配置區(qū)域來做限制,與上面limit_req_zone 里的name對(duì)應(yīng)
第二個(gè)參數(shù):burst=5,重點(diǎn)說明一下這個(gè)配置,burst爆發(fā)的意思,這個(gè)配置的意思是設(shè)置一個(gè)大小為5的緩沖區(qū)當(dāng)有大量請(qǐng)求(爆發(fā))過來時(shí),超過了訪問頻次限制的請(qǐng)求可以先放到這個(gè)緩沖區(qū)內(nèi)
第三個(gè)參數(shù):nodelay,如果設(shè)置,超過訪問頻次而且緩沖區(qū)也滿了的時(shí)候就會(huì)直接返回503,如果沒有設(shè)置,則所有請(qǐng)求會(huì)等待排隊(duì)

下面這個(gè)配置可以限制特定UA(比如搜索引擎)的訪問

limit_req_zone  $anti_spider  zone=one:10m   rate=10r/s;
limit_req zone=one burst=100 nodelay;
if ($http_user_agent ~* "googlebot|bingbot|Feedfetcher-Google") {
    set $anti_spider $http_user_agent;
}
最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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