国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

nginx限制ip訪(fǎng)問(wèn)頻率

2024-01-15 17:23:01 7843

nginx限制ip訪(fǎng)問(wèn)頻率


Nginx通過(guò)limit_conn_zone 和 limit_req_zone對(duì)同一個(gè)IP地址進(jìn)行限速限流,可防止DDOS/CC和flood攻擊 。

limit_conn_zone是限制同一個(gè)IP的連接數(shù)。而一旦連接建立之后 。客戶(hù)端就會(huì)通過(guò)這次的連接發(fā)送多次請(qǐng)求,

那么在此期間的請(qǐng)求頻率和速度進(jìn)行限制就需要limit_req_zone

1、limit_conn_zone配置

連接數(shù)限制,相當(dāng)于限制了nginx與客戶(hù)端之間的管道個(gè)數(shù)

http區(qū)塊的配置:

limit_conn_zone $binary_remote_address zone=asia; 10m;

# 這個(gè)配置的意思就是定義一個(gè)名為 asia的limit_conn_zone用來(lái)存儲(chǔ)session 

# 內(nèi)存為10m大小

server區(qū)塊配置如下;

limit_conn asia 2;

# 單個(gè)客戶(hù)端ip與服務(wù)器的連接數(shù)

2、limit_req_zone配置

請(qǐng)求頻率限制,相當(dāng)于限制了nginx與客戶(hù)端管道之間水的流速

http區(qū)塊配置:

limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

server區(qū)塊配置:

limit_req_zone=one burst=10;

burst漏桶原理

rate=5r/s :從單一IP地址每秒5個(gè)請(qǐng)求是允許的

burst=10:允許超過(guò)頻率rate限制的請(qǐng)求數(shù)不多于10個(gè)

當(dāng)每秒請(qǐng)求超過(guò)5個(gè) 但是在10個(gè)以下,也就是每秒請(qǐng)求的數(shù)量在5-10之間的請(qǐng)求將被延時(shí)delay,雖然沒(méi)有明確的定義delay,

默認(rèn)就是延時(shí)的,因?yàn)槁┩捌鋵?shí)類(lèi)似隊(duì)列Queue或消息系統(tǒng),當(dāng)每秒請(qǐng)求數(shù)量超過(guò)最低速率每5個(gè)請(qǐng)求時(shí),多余的請(qǐng)求將會(huì)

進(jìn)入這個(gè)隊(duì)列排隊(duì)等待。如同機(jī)場(chǎng)安檢,一次放入5個(gè),多余5個(gè),小于10個(gè)排隊(duì)等待。

注:這里的隊(duì)列或者漏桶是以秒為單位的

如果每秒的請(qǐng)求超過(guò)10個(gè) ,也就是超出了burst的限制 。那么也不用排隊(duì),而是直接回絕返回503錯(cuò)誤(Service Temporarily Unavailable)

如果使用nodelay:

limit_req zone=one burst=10 nodelay;

這表示,如果每秒請(qǐng)求在5-10個(gè)之間會(huì)盡快完成,也就是以每秒10個(gè)速率完成,超過(guò)每秒10+5也就是15個(gè)就立即返回503,

因此nodelay實(shí)際沒(méi)有了延時(shí)也就取消了隊(duì)列等候過(guò)渡。在大型網(wǎng)站中,由于訪(fǎng)問(wèn)量巨大,通常會(huì)在http服務(wù)器后面放置一個(gè)消息隊(duì)列,

比如Apache Kafka,用來(lái)排隊(duì)大量請(qǐng)求,對(duì)于中小型網(wǎng)站,推薦使用delay方案,而不要寫(xiě)明nodelay,但是網(wǎng)絡(luò)上其他各種文章幾乎都是推薦nodelay。

3、帶寬限制:

limit_rate 50k;

limit_rate_after 500k;

當(dāng)下載的大小超過(guò)500k以后,以每秒50K速率限制。

示例:

location /flv/ {

    flv;

    limit_rate_after 500k;

    limit_rate       50k;

}

4、防止POST攻擊:

上面總結(jié)了三個(gè)限速限流設(shè)置方式,還有一種能夠防止POST攻擊,黑客通過(guò)發(fā)出大量POST請(qǐng)求對(duì)網(wǎng)站各種URL進(jìn)行試探攻擊,

可以通過(guò)下面方式防止

http {

... #nginx.conf 配置

#如果請(qǐng)求類(lèi)型是POST 將ip地址映射到 $limit 值

map $request_method $limit {

default "";

POST $binary_remote_addr;

}

#創(chuàng)造10mb zone內(nèi)存存儲(chǔ)二進(jìn)制ip

limit_req_zone $limit zone=my_zone:10m rate=1r/s;

}


提交成功!非常感謝您的反饋,我們會(huì)繼續(xù)努力做到更好!

這條文檔是否有幫助解決問(wèn)題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進(jìn)一步的反饋信息:

在文檔使用中是否遇到以下問(wèn)題: