Nginx 限流常用模塊:限制併發和IP訪問頻率

Nginx 是我們常用的負載均衡和反向代理服務器,併發性能非常優秀。但是在併發量極大的情況下,必要限流措施還是需要的,Nginx 的有對應的模塊插件可通過簡單配置來完成這個功能。

Nginx 限流常用模塊:限制併發和IP訪問頻率

限制併發

限制ip併發數,也是說限制同一個ip同時連接服務器的數量。

1、添加limit_conn_zone

這個變量只能在http使用。

http{
...
#定義一個名為one的limit_zone,大小10M內存來存儲session,
#以$binary_remote_addr 為key
#nginx 1.18以後用limit_conn_zone替換了limit_conn
#且只能放在http作用域
limit_conn_zone $binary_remote_addr zone=one:10m;

2、添加limit_conn

這個變量可以在http, server, location使用。只限制一個站點,所以添加到server裡面。

server{
...
location {
...
limit_conn one 20;\t\t #連接數限制
#帶寬限制,對單個連接限數,如果一個ip兩個連接,就是500x2k
limit_rate 500k;\t\t
...
}
...
}

3、重啟Nginx。

Nginx 限流常用模塊:限制併發和IP訪問頻率

限制IP訪問頻率

限制同一個ip在一段時間裡連接服務器的次數,可以一定程度上防止類似CC這種快速頻率請求的攻擊。

1、添加limit_req_zone

這個變量只能在http使用

http{
...
#定義一個名為allips的limit_req_zone用來存儲session,大小是10M內存,
#以$binary_remote_addr 為key,限制平均每秒的請求為5個,
#1M能存儲16000個狀態,rete的值必須為整數,
#如果限制兩秒鐘一個請求,可以設置成30r/m
limit_req_zone $binary_remote_addr zone=allips:10m rate=5r/s;
...

2、添加limit_req

這個變量可以在http, server, location使用。只限制一個站點,所以添加到server裡面。

3、重啟Nginx。

上面兩種配置,注意看註釋,比較實用。


分享到:


相關文章: