关于limit_req和limit_conn的区别
1,首先,limit_req和limit_conn两个模块都是为了来限流的,但是两者不在一个层面,为了搞清楚这个,必须先要弄清楚request和connection的区别,因为在很多情况下,我们把他们混淆了。
so, what is the difference between connection and request?
2, connection是连接,即常说的tcp连接,通过三次握手而建立的一个完整状态机。建立一个连接,必须得要三次握手。
request是指请求,即http请求,
(注意,tcp连接是有状态的,而构建在tcp之上的http却是无状态的协议)。
通过打开一个网页,然后通过wareshark可以看到,一个连接建立后(即三次握手后),在这个连接断开之前(即四次挥手之前),会有很多的http request,这就是他们的区别:即一个连接的生命周期中,会存在一个或者多个请求,这是为了加快效率,避免每次请求都要三次握手建立连接,现在的HTTP/1.1协议都支持这种特性,叫做keepalive。
好了现在知道区别了。
3,那么在Nginx中,对于连接限制模块:limit_conn_module来看:
limit_conn_zone $binanry_remote_addr zone=conn_zone:1m;
locoation /limit.html {
limit_conn conn_zone 1;
}
这样的配配置,表明以ip为key,来限制每个ip访问lmit.html文件时候,最多只能有一个在线,否则其余的都要返回不可用。
这种情况就是一个静止状态的计数可以实现,而无关乎多长时间。
举个例子,如果你的这个连接一直不释放,即使你通过这一个连接发送出再多的request请求,只要我能够应付,那么我就帮你处理。但是,如果你只需要处理2个请求,但是这两个请求是分别用两个连接同时发送过来的,那么,我就只能处理其中一个,另外一个就不行。这就是他的区别。
可以用ab命令来测试:
ab -n100 -c100 -k http://yoursit/limit.html
注意:ab命令的-n -c都是指的发送多少请求,即-n一共发送多少请求,-c同时发送多少请求,他并不关心需要多少连接来发送,默认情况下是每个请求都建立一个连接来发送。
上面这个命令,由于默认是一个连接发送一个请求,那么这将会同时建立100个连接,而这样的话,就会导致限制超过(最多只能一个连接for一个ip)。99个请求都会失败。
而如果你只开一个连接:
ab -n100 -c100 -k http://yousit/limt.html
这里的-k选秀就是表示keepalive,只开一个连接来发送这100个请求,即使是同时发送,那么server也不会认为你超过了,因为在一个时间你只是建立一个连接,这样这100个请求都会干净利落的处理完成。
3,再看limit_req_module
limit_req_zone $binary_remtoe_addr zone=req_zone:1m rate=1r/s;
location /limit.html{
limit_conn zone=req_zone;
}
注意和上面的区别:这里需要为共享内存配置一个速率rate
表明:对于每个ip来说,处理请求的速度不超过每秒1个请求。
可以看到这是个速度量(而上面的那个是数字量,速度和个数还是有直观的区别的吧。。)
那么这时候 :
ab -n100 -c100 http://yoursit/limit.html
和
ab -n100 -c100 -k http://yousit/limt.html
的区别就不是那么明显了,因为这总是同时发送出100个请求(不管是通过100个连接还是1个连接),只要你请求到底的速度超过每秒1个,那么我就会拒绝你。
(完)
附加:https://forum.linode.com/viewtopic.php?t=8064%3E
--------------------- 作者:雷锋不谢 来源:CSDN 原文:https://blog.csdn.net/u012566181/article/details/49968283?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!
关于limit_req和limit_conn的区别的更多相关文章
- Nginx:Nginx limit_req limit_conn限速
简介 Nginx是一个异步框架的Web服务器,也可以用作反向代理,负载均衡器和HTTP缓存,最常用的便是Web服务器.nginx对于预防一些攻击也是很有效的,例如CC攻击,爬虫,本文将介绍限制这些攻击 ...
- nginx限制请求之二:(ngx_http_limit_req_module)模块
相关文章: <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <n ...
- nginx的preaccess 阶段的limit_req模块与limit_conn模块
limit_conn 模块限制并发连接数 [root@python vhast]# vim limit_conn.conf limit_conn_zone $binary_remote_addr zo ...
- Nginx模块之limit_conn & limit_req
limit_conn模块 生效阶段:NGX_HTTP_PREACCESS_PHASE阶段 生效范围:全部worker进程(基于共享内存),进入preaccess阶段前不生效,限制的有效性取决于key的 ...
- [Day4] Nginx Http模块二
一. POST_READ阶段 1. 用户ip在http请求中的传递? 前提:Tcp连接四元组(src ip,src port,dst ip,dst port) HTTP头部 X-Formard ...
- 万字长文!一次性弄懂 Nginx 处理 HTTP 请求的 11 个阶段
Nginx 处理一个 HTTP 请求的全过程 前面给大家讲了 Nginx 是如何处理 HTTP请求头部的,接下来就到了真正处理 HTTP 请求的阶段了.先看下面这张图,这张图是 Nginx 处理 HT ...
- Nginx 的变量究竟是怎么一回事?
之前说了很多关于 Nginx 模块的内容,还有一部分非常重要的内容,那就是 Nginx 的变量.变量在 Nginx 中可以说无处不在,认识了解这些变量的作用和原理同样是必要的,下面几乎囊括了关于 Ng ...
- 基于nginx的频率控制方案思考和实践
基于nginx的频率控制方案思考 标签: 频率控制 nginx 背景 nginx其实有自带的limit_req和limit_conn模块,不过它们需要在配置文件中进行配置才能发挥作用,每次有频控策略的 ...
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
随机推荐
- 把打印的内容保存成文件(PDF)
有时候网页的内容和打印的内容会有一些差异,需要把打印的内容倒出来.是有办法的. 1.以谷歌为内核的浏览器示例,按Ctrl+p快捷键打开打印对话框,如图: 2.点击更改按钮,更改打印机,会出现选择目标打 ...
- CentOS 7 上安装(LAMP)服务 Linux,Apache,MySQL,PHP
介绍 LAMP 是现在非常流行的 WEB 环境, 是 Linux,Apache,MySQL,PHP 的缩写.数据存储在 MySQL 中,动态内容由 PHP 处理. 在本指南中,我们将演示如何在 Cen ...
- 十三个有彩蛋的Linux命令
原文链接: https://my.oschina.net/u/4045573/blog/2986313 一键下载安装配置文本全部命令所需环境 sudo apt-get updategit clon ...
- oracle 恢复误删数据
快照 select * from sys_info as of timestamp to_Date('2014-04-08 15:28:00', 'yyyy-mm-dd hh24:mi:ss') ...
- CodeVs.1036 商务旅行 ( LCA 最近公共祖先 )
CodeVs.1036 商务旅行 ( LCA 最近公共祖先 ) 题意分析 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从 ...
- Android studio gradle配置完整版(转)
Android studio gradle配置完整版https://my.oschina.net/u/1471093/blog/539075 Android studio 自定义打包apk名 - pe ...
- nodejs进程异常退出处理方法
1. 捕获uncaughtException process.on('uncaughtException', function (err) { //打印出错误 console.log(err); // ...
- CF17E Palisection——优秀的综合计数题
题意翻译 给定一个长度为n的小写字母串.问你有多少对相交的回文子 串(包含也算相交) . 输入格式 第一行是字符串长度n(1<=n<=2*10^6),第二行字符串 输出格式 相交的回文子串 ...
- RF parameter
There are primarily 3 features which can be tuned to improve the predictive power of the model : 说明: ...
- MongoDB 安装及开启关闭
开启关闭的方式: 命令行 输入 net start mongodb 就打开mongo的服务了 输入 net stop mongodb 关闭服务 验证是否成功的方式: 在浏览器中输入 http://lo ...