2016年04月06日 17:36:58 亦非我所願丶 閱讀數:2629 標籤: nginxmodule 更多node
我的分類: nginxnginx
版權聲明:本文爲博主原創文章,未經博主容許不得轉載。 https://blog.csdn.net/wanglei_storage/article/details/51076882服務器
上一篇文章主要寫nginx限制鏈接數ngx_http_limit_conn_module 模塊的做用及使用方法,下面來寫ngx_http_limit_req_module模塊的做用及使用。spa
經過ngx_http_limit_req_module 模塊能夠經過定義的鍵值來限制請求處理的頻率。特別的,能夠限制來自單個IP地址的請求處理頻率。 限制的方法如同漏斗,每秒固定處理請求數,推遲過多請求。.net
該模塊提供了兩個配置參數,limit_req_zone 和 limit_req ,其中 limit_req_zone 只能配置在 http{} 段,而 limit_req 則能夠配置於http{},server{},location{} 區段中。3d
語法:limit_req_zone $variable zone=name:size rate=rate;
配置段:httpserver
該指令設置一塊共享內存限制域用來保存鍵值的狀態參數。特別是保存了當前超出請求的數量。鍵的值就是指定的變量(控制不被計算)。如:blog
註釋:
使用$binary_remote_addr變量,能夠將每條狀態記錄的大小減小到64個字節,這樣1M的內存能夠保存大約1萬6千個64字節的記錄圖片
若是限制域的存儲空間耗盡了,對於後續全部請求,服務器都會返回503(Service Temporarily Unavailable)錯誤內存
速度能夠設置爲每秒處理請求數和每分鐘處理請求數,其值必須是整數,因此若是你須要每秒處理少於1個的請求,2秒處理一個請求,可使用30r/m
語法: limit_req zone=name burst=number [nodelay];
配置段:http,server,location
設置對應的共享內存限制域和容許被處理的最大請求數閥值。若是請求的頻率超過了限制域配置的值,請求處理會被延遲,因此全部的請求都是以定義的頻率被處理的。超過頻率限制的請求會被延遲,直到被延遲的請求數超過了定義的閥值,這時,這個請求會被終止,並返回503(Service Tempporarily Unavailable)錯誤,這個閥值的默認值爲0,如:
限制頻率每秒不超過一個請求,同時容許超過頻率限制的請求數很少於100個;若是不但願超過的請求被延遲,能夠用nodelay參數。
limit_req_zone $binary_remote_addr zone=showjoy_req:20m rate=1r/s;
主要是用來定義變量,空間名稱,以及共享內存大小。
limit_req zone=showjoy_req burst=100 nodelay;
主要是用來使用前面定義的空間,定義請求頻率限制,使用nodelay則表示不但願超過的請求被延遲。
可能要對某些IP不作限制,須要使用到白名單。