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.mzph.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的很…