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,一经查实,立即删除!

相关文章

Linux实战教学笔记12:linux三剑客之sed命令精讲

第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等。…

activiti 为什么需要采用乐观锁?

乐观锁 为什么需要采用乐观锁? 由于activiti一个周期的transaction时间可能比较长,且同一流程实例中存在任务并发执行等场景。设计者将update、insert、delete事务性的操作推迟至command结束时完成,这样尽量降低锁冲突的概率,由…

支付宝架构

支付宝系统架构图如下: 支付宝架构文档有两个搞支付平台设计的人必须仔细揣摩的要点。 一个是账务处理。在记账方面,涉及到内外两个子系统,外部子系统是单边账,满足线上性能需求;内部子系统走复式记账,满足…

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 日,由高端技术领导者社交平台 TGO 鲲鹏会主办的 GTLC 全球技术领导峰会分站首站在北京举行。会上马蜂窝技术副总裁 \u0026amp; TGO 鲲鹏会会员张矗发表了主题为“我在马蜂窝的技术管理实践”的演讲。本文根据其演讲整理而成。大家好,我是来自马蜂…

fiddler抓包1-抓小程序https包

抓小程序包和抓app包是一样的操作方法;安卓用fiddler,ios用charles; 一、环境准备 1.电脑已装最新版fiddler 2.手机和电脑在同一局域网 二、fiddler设置 1.fiddler>Tools>Options>HTTPS 勾选Capture HTTPS CONNECTs 及下边的子项&am…

冲刺第七天

今天任务进行情况:今天我们将我们的游戏导到界面形成可用的应用程序,并且进行调试与运行,让同学试玩,发现了困难并加以改正。 遇到的困难及解决方法: 运行时发现游戏界面中UI的button和image的位置会随分辨率的不同而发…

Node.js Streams:你需要知道的一切

Node.js Streams:你需要知道的一切 图像来源 Node.js流以难以使用而闻名,甚至更难理解。好吧,我有个好消息 - 不再是这样了。 多年来,开发人员在那里创建了许多软件包,其唯一目的是简化流程。但在本文中,我…

shell之引号嵌套引号大全

万恶的引号 这个能看懂你就出师了! 转载于:https://www.cnblogs.com/theodoric008/p/10000480.html

oracle表分区详解

oracle表分区详解 从以下几个方面来整理关于分区表的概念及操作: 表空间及分区表的概念表分区的具体作用表分区的优缺点表分区的几种类型及操作方法对表分区的维护性操作 1.表空间及分区表的概念 表空间: 是一个或多个数据文件的集合,所有的数据对象都存…

如果您不将Docker用于数据科学项目,那么您将生活在1985年

重点 (Top highlight)One of the hardest problems that new programmers face is understanding the concept of an ‘environment’. An environment is what you could say, the system that you code within. In principal it sounds easy, but later on in your career yo…

jmeter对oracle压力测试

下载Oracle的jdbc数据库驱动包,注意Oracle数据库的版本,这里使用的是:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production; 一般数据库的驱动包文件在安装路径下:D:\oracle\product\10.2.…

docker部署flask_使用Docker,GCP Cloud Run和Flask部署Scikit-Learn NLP模型

docker部署flaskA brief guide to building an app to serve a natural language processing model, containerizing it and deploying it.构建用于服务自然语言处理模型,将其容器化和部署的应用程序的简要指南。 By: Edward Krueger and Douglas Franklin.作者&am…

SQL的执行计划

SQL的执行计划实际代表了目标SQL在Oracle数据库内部的具体执行步骤,作为调优,只有知道了优化器选择的执行计划是否为当前情形下最优的执行计划,才能够知道下一步往什么方向。 执行计划的定义:执行目标SQL的所有步骤的组合。 我们首…

[转帖]USB-C和Thunderbolt 3连接线你搞懂了吗?---没搞明白.

USB-C和Thunderbolt 3连接线你搞懂了吗? 2018年11月25日 07:30 6318 次阅读 稿源:威锋网 3 条评论按照计算行业的风潮,USB Type-C 将会是下一代主流的接口。不过,在过去两年时间里,关于 USB-C、Thunderbolt 3、USB 3.1…

大数据技术 学习之旅_为什么聚焦是您数据科学之旅的关键

大数据技术 学习之旅David Robinson, a data scientist, has said the following quotes:数据科学家David Robinson曾说过以下话: “When you’ve written the same code 3 times, write a function.”“当您编写了3次相同的代码时,请编写一个函数。” …

无监督学习 k-means_无监督学习-第4部分

无监督学习 k-means有关深层学习的FAU讲义 (FAU LECTURE NOTES ON DEEP LEARNING) These are the lecture notes for FAU’s YouTube Lecture “Deep Learning”. This is a full transcript of the lecture video & matching slides. We hope, you enjoy this as much as …

vCenter 升级错误 VCSServiceManager 1603

近日,看到了VMware发布的vCenter 6.7 Update 1b的更新消息。其中有一条比较震撼。有误删所有VM的概率,这种BUG谁也承受不起。Removing a virtual machine folder from the inventory by using the vSphere Client might delete all virtual machinesIn t…

day28 socketserver

1. socketserver 多线程用的 例 import socket import timeclientsocket.socket() client.connect(("127.0.0.1",9000))while 1:cmdinput("请输入指令")client.send(cmd.encode("utf-8"))from_server_msgclient.recv(1024).decode("utf…

车牌识别思路

本文源自我之前花了2天时间做的一个简单的车牌识别系统。那个项目,时间太紧,样本也有限,达不到对方要求的95%识别率(主要对于车牌来说,D,0,O,I,1等等太相似了。然后,汉字…