nginx: 限流中连接和请求的区别:
一,关于limit_req和limit_conn的区别
what is the difference between connection and request?
- connection是连接,即常说的tcp连接,通过三次握手而建立的一个完整状态机。建立一个连接,必须得要三次握手。
断开连接时要有四次挥手的操作. - request是指请求,即http请求,tcp连接是有状态的,而构建在tcp之上的http却是无状态的协议
通过打开一个网页,然后通过wireshark可以看到,
一个连接建立后(即三次握手后),在这个连接断开之前(即四次挥手之前),会有很多的http request,
这就是他们的区别:即一个连接的生命周期中,会存在一个或者多个请求,
这么做的目的: 为了加快效率,避免每次请求都要三次握手建立连接,
现在的HTTP/1.1协议都支持这种特性,叫做keepalive。
二,实际例子:
1, limit_conn
limit_conn_zone $binanry_remote_addr zone=conn_zone:1m;
limit_conn conn_zone 1;
例子中的配置,表明以ip为key,来限制每个ip访问网站的时候,最多只能有一个在线,否则其余的都要返回不可用。
这种情况就是一个静止状态的计数可以实现,而无关乎多长时间。
举个例子,如果你的这个连接一直不释放,即使你通过这一个连接发送出再多的request请求,
只要我能够应付,那么我就帮你处理。
但是,如果你只需要处理2个请求,但是这两个请求是分别用两个连接同时发送过来的,
那么,我就只能处理其中一个,另外一个就不行。
这就是他的区别。
2,limit_req
limit_req_zone $binary_remtoe_addr zone=req_zone:1m rate=1r/s; #这里为共享内存配置了一个速率rate,
limit_req zone=req_zone;
表明:对于每个ip来说,处理请求的速度不超过每秒1个请求。
可以看到这是个速度值,每秒1个请求,
就是说:如果某ip同时发送出100个请求(不管是通过100个连接还是1个连接),
只要你请求到底的速度超过每秒1个,那么我就会拒绝你。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2022-09-26 javascript:页面中有多处window.onload时的处理(chrome 105.0.5195.125)
2022-09-26 javascript: 自定义鼠标拖动的滑块slider(chrome 105.0.5195.125)
2021-09-26 前台项目基础框架之spring boot后端(spring boot v2.5.4)
2021-09-26 前台项目基础框架之vue前端(vue@3.2.6)
2021-09-26 intellij idea 2021.2:为一个spring boot项目改名
2020-09-26 linux(centos8):安装配置consul集群(consul 1.8.4 | centos 8.2.2004)