nginx訪問頻率限制
A. nginx 限制ip請求某個url的頻率
問題描述:
今天在統計nginx日誌中,url訪問頻率的時候,發現一個介面訪問次數遠遠大於其他的url。於是用tail -f查看實時日誌,發現有個ip以每秒3-4次請求這個url。詢問開發後,得知是第三方調用的,頻率有點高,需要限制一下。
解決:
在nginx的http模塊中添加以下配置
rate=1r/s 的意思是每個地址每秒只能請求一次
在server模塊中添加一下配置
burst是指一共有5個令牌,發完後,只能根據rate的設定每秒新增一個
reload nginx的配置之後,再次查看日誌。可以看到訪問頻率明顯降下來了
B. Nginx中怎麼限制某個IP同一時間段的訪問次數
#ip limit
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
limit_conn perip 2;
limit_conn perserver 20;
limit_rate 100k;
$binary_remote_addr是限制同一客戶端ip地址;
$server_name是限制同一server最大並發數;
limit_conn為限制並發連接數;
limit_rate為限制下載速度;
C. 一文搞懂Nginx限流,原來這么簡單
Nginx現在已經是最火的負載均衡之一,在流量陡增的互聯網面前,介面限流也是很有必要的,尤其是針對高並發的場景。Nginx的限流主要是兩種方式:限制訪問頻率和限制並發連接數。
Nginx中我們使用 ngx_http_limit_req_mole 模塊來限制請求的訪問頻率,基於漏桶演算法原理實現。接下來我們使用 nginx limit_req_zone 和 limit_req 兩個指令,限制單個IP的請求處理速率。
語法: limit_req_zone key zone rate
按上面的配置在流量突然增大時,超出的請求將被拒絕,無法處理突發流量,那麼在處理突發流量的時候,該怎麼處理呢?Nginx提供了 burst 參數來解決突發流量的問題,並結合 nodelay 參數一起使用。burst 譯為突發、爆發,表示在超過設定的處理速率後能額外處理的請求數。
burst=20 nodelay 表示這20個請求立馬處理,不能延遲,相當於特事特辦。不過,即使這20個突發請求立馬處理結束,後續來了請求也不會立馬處理。burst=20 相當於緩存隊列中佔了20個坑,即使請求被處理了,這20個位置這只能按 100ms一個來釋放。這就達到了速率穩定,但突然流量也能正常處理的效果。
Nginx 的 ngx_http_limit_conn_mole 模塊提供了對資源連接數進行限制的功能,使用 limit_conn_zone 和 limit_conn 兩個指令就可以了。
好了,以上幾種限流方式,你都清楚了嗎?