Nginx:Nginx limit_req limit_conn限速

簡介

  • Nginx是一個異步框架的Web服務器,也可以用作反向代理,負載均衡器和HTTP緩存,最常用的便是Web服務器。nginx對于預防一些攻擊也是很有效的,例如CC攻擊,爬蟲,本文將介紹限制這些攻擊的方法,可以使用nginx的ngx_http_limit_conn_module、ngx_http_limit_req_module這兩個模塊達到目的,該模塊為nginx內置模塊,yum安裝即有,無需編譯安裝。本文就介紹nginx這兩個模塊的使用和細節,希望能夠對需要的小伙伴有所幫助。

基本環境介紹

  • 兩臺機器,192.168.30.105和192.168.30.106均為 1c2g40g配置,106主機提供web服務,105主機部署ab工具。

web服務如下

img-w500

ab壓測獲取基礎數據

105 ab壓測結果

對web服務器index.html頁面發送并發為1000總計1000000的請求測試,每個請求建立一個連接
ab -n 1000000 -c 1000 http://192.168.30.106:80/index.html
img-w500
從測試結果來看,請求全部成功;有98%的請求在22ms以內就完成響應,有99%的請求在1007ms以內就完成響應,請求響應的最長時長為31077ms。

nignx ngx_http_limit_conn_module模塊

  • 該模塊的功能是限制單個ip建立連接的個數。

對nginx進行配置

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

限制每個ip連接的個數為一個

測試

對web服務器index.html頁面發送并發為1000總計1000000的請求測試
ab -n 1000000 -c 1000 http://192.168.30.106:80/index.html
img-w500

從測試結果來看,請求全部成功;有98%的請求在58ms以內就完成響應,有99%的請求在1008ms以內就完成響應,請求響應的最長時長為31870ms。

測試效果

測試結果無變化,查眾多文檔,有問題,無答案,估計是個bug。

nignx ngx_http_limit_req_module模塊

  • 該模塊的功能是限制單個ip請求的個數(請求頻率)。

對nginx進行配置

去掉之前limit_conn 配置,添加如下配置

http {limit_req_zone $binary_remote_addr zone=two:10m rate=1r/s;...server {...location / {limit_req zone=two;}    

限制請求的頻率為單個ip每秒一個

測試

對web服務器index.html頁面發送并發為1000總計1000000的請求測試
ab -n 1000000 -c 1000 http://192.168.30.106:80/index.html
img-w500
從測試結果來看,請求只有55個成功。

測試效果

有效的阻止了用戶的請求。

測試過程web服務資源使用情況監控

CPU利用
img-w500

網絡接口流量
img-w500

TCP連接數狀態
img-w500

總結

  • 從測試的結果以及監控數據來看,limit_conn模塊無效,不能起到任何限制作用;limit_req模塊能夠明顯限制用戶的請求內容,對于超出限制的請求,給予503的反饋;兩者對服務器性能上都沒有優化作用,拒絕的請求需要花費更多的硬件資源來處理,CPU消耗增多,接口流出的流量劇增。
  • 測試結果不是很理想,對于文中的錯誤和不足,歡迎有見識的小伙伴批評指教。

參考文檔

  • 官方文檔:http://nginx.org/en/docs
  • 使用nginx limit_req限制用戶請求速率:https://www.centos.bz/2017/03/using-nginx-limit_req-limit-user-request-rate
  • 關于limit_req和limit_conn的區別:https://blog.csdn.net/u012566181/article/details/49968283
  • ab壓力測試報錯:https://www.cnblogs.com/felixzh/p/8295471.html
  • ab性能測試結果分析:https://www.cnblogs.com/gumuzi/p/5617232.html
  • Rate Limiting with NGINX and NGINX Plus:https://www.nginx.com/blog/rate-limiting-nginx/

轉載于:https://www.cnblogs.com/William-Guozi/p/nginx_limit.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387944.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387944.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387944.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

快速數據庫框架_快速學習新的數據科學概念的框架

快速數據庫框架重點 (Top highlight)數據科學 (Data Science) Success in data science and software engineering depends on our ability to continuously learn new models and concepts.數據科學和軟件工程的成功取決于我們不斷學習新模型和概念的能力。 Both domains are…

Linux實戰教學筆記12:linux三劍客之sed命令精講

第十二節 linux三劍客之sed命令精講 標簽(空格分隔): Linux實戰教學筆記-陳思齊 ---更多資料點我查看 1,前言 我們都知道,在Linux中一切皆文件,比如配置文件,日志文件,啟動文件等等。…

activiti 為什么需要采用樂觀鎖?

樂觀鎖 為什么需要采用樂觀鎖? 由于activiti一個周期的transaction時間可能比較長,且同一流程實例中存在任務并發執行等場景。設計者將update、insert、delete事務性的操作推遲至command結束時完成,這樣盡量降低鎖沖突的概率,由…

Python實現三級菜單(字典和列表的使用)

menu { 北京: { 海淀: { 五道口: { soho: {}, 網易: {}, google: {} }, 中關村: { 愛奇藝: {}, 汽車之家: {}, 優酷: {} …

停止使用p = 0.05

How many of you use p0.05 as an absolute cut off? p ≥ 0.05 means not significant. No evidence. Nada. And then p < 0.05 great it’s significant. This is a crude way of using p-values, and hopefully I will convince you of this.你們中有多少人使用p 0.05作…

centos7系統根目錄擴容

比如 點擊了后 點擊創建虛擬磁盤 選擇一個 20G 然后啟動虛擬機使用fdisk查看所有的磁盤 看是否新增了一個20G的硬盤 [rootlocalhost ~]# fdisk -l磁盤 /dev/sda&#xff1a;8589 MB, 8589934592 字節&#xff0c;16777216 個扇區 Units 扇區 of 1 * 512 512 bytes 扇區大小(…

instrumentation模擬很多activity的操作

android.app.Instrumentation好像原來是用來做測試的, 可以用來模擬很多activity的操作 主要代碼如下 如果在文本框中輸入24,或者25 點擊按鈕就能模擬音量加減鍵 鍵值可以查看android.view.KeyEvent [java] view plaincopy package com.qefee.testinstrumentation; import…

成像數據更好的展示_為什么更多的數據并不總是更好

成像數據更好的展示Over the past few years, there has been a growing consensus that the more data one has, the better the eventual analysis will be.在過去的幾年中&#xff0c;越來越多的共識是&#xff0c;數據越多&#xff0c;最終的分析就越好。 However, just a…

支付寶架構

支付寶系統架構圖如下&#xff1a; 支付寶架構文檔有兩個搞支付平臺設計的人必須仔細揣摩的要點。 一個是賬務處理。在記賬方面&#xff0c;涉及到內外兩個子系統&#xff0c;外部子系統是單邊賬&#xff0c;滿足線上性能需求&#xff1b;內部子系統走復式記賬&#xff0c;滿足…

怎樣可以跨進程測試

在Android系統下模擬鼠標鍵盤等輸入設備&#xff0c;網絡上資料非常多。但不少是人云亦云&#xff0c;甚至測試都不愿測試一下就抄上來了。這次寫一點體會&#xff0c;當作拋磚引玉。0. 背景知識&#xff1a;眾所周知&#xff0c;Android是將Framework架在Linux之上的系統。Lin…

Android Studio 導入新工程項目

1 導入之前先修改工程下相關文件 1.1 只需修改如下三個地方1.2 修改build.gradle文件 1.3 修改gradle/wrapper/gradle-wrapper.properties 1.4 修改app/build.gradle 2 導入修改后的工程 2.1 選擇File|New|Import Project 2.2 選擇修改后的工程 如果工程沒有變成AS符號&#xf…

馬蜂窩張矗:績效考核是為了激發工作潛力,而不是逃避問題

3 月 23 日&#xff0c;由高端技術領導者社交平臺 TGO 鯤鵬會主辦的 GTLC 全球技術領導峰會分站首站在北京舉行。會上馬蜂窩技術副總裁 \u0026amp; TGO 鯤鵬會會員張矗發表了主題為“我在馬蜂窩的技術管理實踐”的演講。本文根據其演講整理而成。大家好&#xff0c;我是來自馬蜂…

vue domo網站_DOMO與Tableau-逐輪

vue domo網站Let me be your BI consultant. Best yet, let me be your free consultant on the following question:讓我成為您的BI顧問。 最好的是&#xff0c;讓我成為您的免費顧問 &#xff0c;解決以下問題&#xff1a; DOMO vs. Tableau — What should I use?DOMO vs.…

fiddler抓包1-抓小程序https包

抓小程序包和抓app包是一樣的操作方法&#xff1b;安卓用fiddler&#xff0c;ios用charles&#xff1b; 一、環境準備 1.電腦已裝最新版fiddler 2.手機和電腦在同一局域網 二、fiddler設置 1.fiddler>Tools>Options>HTTPS 勾選Capture HTTPS CONNECTs 及下邊的子項&am…

多態使用的前提

1&#xff1a;必須是繼承&#xff08;extends&#xff09;&#xff0c;實現&#xff08;implements&#xff09; 才行2&#xff1a;必須要重寫&#xff08;覆蓋&#xff09;父類的方法。轉載于:https://www.cnblogs.com/liyunchuan/p/10663788.html

Linux下的 FTP

1.安裝vsftpd yum install vsftpd 2.啟動/重啟/關閉vsftpd服務器 [rootlocalhost ftp]# /sbin/service vsftpd restart Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ] OK表示重啟成功了. 啟動和關閉分別把restart改為start/stop即可. 如果是源碼安裝的,到…

python入門23 pymssql模塊(python連接sql server增刪改數據 )

增刪改數據必須connect.commit()才會生效 回滾函數 connect.rollback() 連接數據庫 dinghanhua sql server增刪改 import pymssqlserver 192.168.1.1 user user password 111111 database testdbconnect pymssql.connect(server server,user user,passwordpassword,da…

每個人都應該使用的Python 3中被忽略的3個功能

重點 (Top highlight)Python 3 has been around for a while now, and most developers — especially those picking up programming for the first time — are already using it. But while plenty of new features came out with Python 3, it seems like a lot of them ar…

iframe自適應高度

為什么需要使用iframe自適應高度呢&#xff1f;其實就是為了美觀&#xff0c;要不然iframe和窗口長短大小不一&#xff0c;看起來總是不那么舒服&#xff0c;特別是對于我們這些編程的來說&#xff0c;如鯁在喉的感覺。 首先設置樣式 body{margin:0; padding:0;} 如果不設置bod…

.Net轉Java自學之路—SpringMVC框架篇八(RESTful支持)

RESTful架構&#xff0c;REST即Representational State Transfer。表現層狀態轉換&#xff0c;就是目前最流行的一種互聯網軟件架構。它結構清晰、符合標準、易于理解、擴展方便&#xff0c;所以得到越來越多網站的采用。 RESTful其實就是一個開發理念&#xff0c;是對http的很…