Nginx 限制ip并發(fā)數(shù)及請求速度

1. 限制單IP并發(fā)訪問數(shù)量

nginx中ngx_http_limit_conn_module模塊用于限制連接數(shù)量植榕,特別是來自單個IP地址的連接數(shù)量颈娜。并非所有的連接都被計數(shù)滩褥。只有當(dāng)服務(wù)器處理了請求并且已經(jīng)讀取了整個請求頭時犁跪,連接才被計數(shù)杨帽。

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    ...
    server {
        ...
        location / {
            limit_conn addr 10;
            ...
        }
}

$binary_remote_addr對于IPv4地址摄乒,變量的大小始終為4個字節(jié)悠反,對于IPv6地址則為16個字節(jié)。存儲狀態(tài)在32位平臺上始終占用32或64個字節(jié)馍佑,在64位平臺上占用64個字節(jié)斋否。一個兆字節(jié)的區(qū)域可以保持大約32000個32字節(jié)的狀態(tài)或大約16000個64字節(jié)的狀態(tài)。如果區(qū)域存儲耗盡挤茄,服務(wù)器會將錯誤返回 給所有其他請求如叼。10M可存儲160000個狀態(tài)

2. 限制單IP訪問速度

nginx中ngx_http_limit_req_module模塊用于限制每一個請求的處理速率,特別是從一個單一的IP地址的請求的處理速率穷劈。

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=30r/s;
    ...
    server {
        ...
        location / {
            limit_req zone=one burst=50;
            ...
        }
}

3. 測試

我們可以用ab工具測試一下笼恰。

yum -y install httpd-tools

并發(fā)測試

并發(fā)數(shù)50,總共執(zhí)行次數(shù)100

ab -c 50 -n 100 http://127.0.0.1:6688/

無限制時

> ab  -c 50 -n 100 http://127.0.0.1:6688/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient).....done


Server Software:        nginx
Server Hostname:        127.0.0.1
Server Port:            6688

Document Path:          /
Document Length:        612 bytes

Concurrency Level:      50
Time taken for tests:   0.007 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      83800 bytes
HTML transferred:       61200 bytes
Requests per second:    14828.00 [#/sec] (mean)
Time per request:       3.372 [ms] (mean)
Time per request:       0.067 [ms] (mean, across all concurrent requests)
Transfer rate:          12134.63 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.3      1       2
Processing:     0    1   0.7      2       2
Waiting:        0    1   0.5      1       2
Total:          1    2   0.5      2       3

限制配置

http {
    ...
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_req_zone $binary_remote_addr zone=one:10m rate=30r/s;
    server {
        limit_conn addr 10;
        limit_req zone=one burst=50;
        ...
    }
}

限制后

> ab  -c 50 -n 100 http://121.40.237.209:6688/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 121.40.237.209 (be patient).....done


Server Software:        nginx
Server Hostname:        121.40.237.209
Server Port:            6688

Document Path:          /
Document Length:        612 bytes

Concurrency Level:      50
Time taken for tests:   3.309 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      83800 bytes
HTML transferred:       61200 bytes
Requests per second:    30.22 [#/sec] (mean)
Time per request:       1654.476 [ms] (mean)
Time per request:       33.090 [ms] (mean, across all concurrent requests)
Transfer rate:          24.73 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        4    5   0.3      5       5
Processing:     5 1237 547.1   1660    1664
Waiting:        5 1237 547.1   1660    1664
Total:         10 1241 547.2   1665    1668

可以看出100個請求在3.3秒完成符合30r/s

參考文章
http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末歇终,一起剝皮案震驚了整個濱河市社证,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌评凝,老刑警劉巖追葡,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奕短,居然都是意外死亡宜肉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門翎碑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谬返,“玉大人,你說我怎么就攤上這事日杈∏猜粒” “怎么了佑刷?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長酿炸。 經(jīng)常有香客問我瘫絮,道長,這世上最難降的妖魔是什么填硕? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任麦萤,我火速辦了婚禮,結(jié)果婚禮上廷支,老公的妹妹穿的比我還像新娘频鉴。我一直安慰自己,他們只是感情好恋拍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布垛孔。 她就那樣靜靜地躺著,像睡著了一般施敢。 火紅的嫁衣襯著肌膚如雪周荐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天僵娃,我揣著相機(jī)與錄音概作,去河邊找鬼。 笑死默怨,一個胖子當(dāng)著我的面吹牛讯榕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匙睹,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼愚屁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痕檬?” 一聲冷哼從身側(cè)響起霎槐,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梦谜,沒想到半個月后国夜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘹朗,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年贵少,在試婚紗的時候發(fā)現(xiàn)自己被綠了抗斤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孵淘。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡良价,死狀恐怖辣吃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仰猖,我是刑警寧澤捏肢,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站饥侵,受9級特大地震影響鸵赫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躏升,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一辩棒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膨疏,春花似錦一睁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饲帅,卻和暖如春复凳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灶泵。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工育八, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赦邻。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓髓棋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惶洲。 傳聞我的和親對象是個殘疾皇子按声,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355