nginx 限速最容易理解的说明
nginx 限速研究汇报
写在前面
这两天服务器带宽爆了,情况如下图:
出于降低带宽峰值的原因,我开始各种疯狂的研究nginx限速。下面是我研究过程中的心得!(花了好几个小时的时间写的人生第一篇技术类网文)
限速的方案:
声明:
- 连接数:单个ip的请求数
nginx限速的实现原理:
通过控制单个连接的下载带宽和控制连接数来实现。
首先限制单个连接的带宽,然后限制连接数。如果要实现限速,限制单个连接带宽是必须的,限制连接数是非必须的。
在实际情况中,我们可能出于单个IP会存在大量连接数的情况而不去限制连接数。
比如:公司用的是专线,全公司的人用的是同一个IP,如果你限制连接数为5,下载器默认连接数为5,那么就只能供一个人下载,而别的人访问都是503。还有很多情况,都不允许我们去限制连接数,所以,我们只能限制单个连接的带宽。
在限制单个连接带宽时要注意,有一些下载器使用的是单链接,你不能将单个连接的带宽限制的太小。
比如nginx限速配置如下:http {
limit_conn_zone $binary_remote_addr zone=addr:10m; #实例化nginx对象(哈哈,这样理解美滋滋)
server {
listen 80;
server_name xx.com;
access_log xx.log main;
error_log xx.log;
root xx;
index index.html; limit_conn perip 5; #调用nginx对象属性并赋值
limit_rate 20k; #调用nginx对象属性并赋值
#上面这两个limit的意思是:单个IP最大允许5个连接,单个连接带宽为20K,若下载器一次可以发起5个请求(5个连接数),那么这个下载器最大下载速度为100K;
}
}限速效果图:
- google 下载情况:

- 360 下载情况:

- 迅雷下载情况:

对比发现:nginx限速对浏览器自带的下载器来说,都可以限制,但是唯独下载软件(如:迅雷)不受限制。(毕竟人家就是靠这个吃饭的)。当然你也可以连开多个下载任务,测试一下连接数限制,如果你设置了连接数为5,你可以最多在浏览器打开5个下载,下载软件(如:迅雷)中可能只能打开一个下载任务(因为他会打开很多连接,已经超过了你设置的5个连接数)。如果超过的话,下面我们说的连接数限制中的两个方法返回的结果略有不同:
方法1. 会将超出的请求放入burst队列中,队列的长度取决于你设置的burst值,一个一个处理,超过队列长度的返回503。
方法2. 直接返回503。
- google 下载情况:
如何控制这两个量(单个连接数的下载速度, 连接数)
- 在http中添加的都像是实例化一个nginx对象,并给nginx对象赋初值,在server中的配置就像是调用这个nginx类的属性(个人理解)
连接数控制
第一种方式:
首先在http下添加:limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;然后在server中添加:
limit_req zone=one burst=5 nodelay;示例一
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
server {
...
location /download/ {
limit_req zone=one burst=5 nodelay;
#nodelay 的大概意思是告诉nginx将超出**rate**限制的连接直接返回503,不需要等待处理
#这句话的意思就是说,每秒处理1个请求,队列中最多有5个待处理请求,多余请求直接返回503(个人理解)
}
}
}第二种方式:
首先在http中添加:limit_conn_zone $binary_remote_addr zone=addr:10m;然后在server中添加:
limit_conn addr 1;示例二
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
limit_conn addr 1; #通过这个限制链接数
}
}
}单个连接数的下载带宽控制:
首先在http中添加:limit_conn_zone $binary_remote_addr zone=addr:10m;然后在server中添加:
limit_rate 100K;示例
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
limit_rate 100k; #通过这个限制单个连接数的带宽
}
}
}
OK,我们知道了nginx限速原理,并学会配置这两个配置项,测试效果我也已经给出了效果图,下面我们来总结一下:
- 要想实现限速,还是我之前说的,单个连接带宽限制是必须的。
- 在生产环境中,建议不要使用连接数限制
- 单个连接的带宽限制不易过低
- 像迅雷这种下载器的限速,可能需要别的办法
注:文中部分内容参考自 关于nginx的限速模块
nginx 限速最容易理解的说明的更多相关文章
- Nginx限速模块初探
Nginx限速模块分为哪几种?按请求速率限速的burst和nodelay参数是什么意思?漏桶算法和令牌桶算法究竟有什么不同?本文将带你一探究竟.我们会通过一些简单的示例展示Nginx限速模块是如何工作 ...
- Nginx Http框架的理解
Nginx Http框架的理解 HTTP框架是Nginx基础框架的一部分,Nginx的其它底层框架如master-worker进程模型.event模块.mail 模块等. HTTP框架代码主要有2个模 ...
- Nginx (限速)限制并发、限制访问速率、限制流量
Nginx 限制并发访问速率流量,配置还是简单的,看下Nginx文档根据文中这三个模块对照看一下就可以,Nginx限速使用的是漏桶算法(感兴趣可以看下文末的参考资料),需要注意的是:当需要进行限速操作 ...
- Nginx 限速模块一览
为了保护服务器不被刷流量,或者业务方面的一些限制,需要做一些限速措施. 一.http 请求并发连接数模块:ngx_http_limit_conn_module 这个模块可以设置每个定义的变量(比如客户 ...
- Nginx限速遇到的问题
公司使用的是Nginx做文件服务器,最近服务器流量增大,老板提出要给每个客户端进行限速. 在Nginx中进行限速配置: http { limit_zone one $binary_remote_add ...
- nginx配置之深入理解
继上一篇<debian+nginx配置初探--php环境.反向代理和负载均衡>成功之后,有点小兴奋,终于不用整lvs那么复杂来搞定负载,但还是有很多概念没弄清楚. 什么是CGI.FastC ...
- nginx限速
nginx 要实现限速,完整的实现是要限制客户端请求频率,并发连接和传输速度 1.请求限制 Nginx 请求限制的功能来自于 ngx_http_limit_req_module 模块.使用它需要首先在 ...
- NGINX 负载均衡的理解
前言 NGINX是轻量级,也是当前比较流行的web服务器软件.体积小但是功能强大. 这里我按照自己的理解,记录下对NGINX负载均衡的认识.(加权均衡,最小连接) 这里参考了 [https://blo ...
- 关于nginx限速的配置
limit_req zone=req_one burst=; zone定义了一个req_one的name,burst表示允许超过限制的请求数不多于20个,后面可加参数(nodelay):超过的请求不会 ...
随机推荐
- kubernetes 利用label标签来绑定到特定node运行pod
利用label标签来绑定到特定node运行pod: 不如将有大量I/O的pod部署到配置了ssd的node上或者需要使用GPU的pod部署到某些安装了GPU的节点上 查看节点的标签: kubectl ...
- BZOJ3275Number——二分图最大权独立集
题目描述 有N个正整数,需要从中选出一些数,使这些数的和最大.若两个数a,b同时满足以下条件,则a,b不能同时被选1:存在正整数C,使a*a+b*b=c*c2:gcd(a,b)=1 输入 第一行一个正 ...
- 微信web开发者工具 移动调试
1 下载 微信web开发者工具:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455784140 下载一个自己能用的版本: 2 ...
- SQL Server查询优化器的工作原理
SQL Server的查询优化器是一个基于成本的优化器.它为一个给定的查询分析出很多的候选的查询计划,并且估算每个候选计划的成本,从而选择一个成本最低的计划进行执行.实际上,因为查询优化器不可能对每一 ...
- BSGS算法及扩展
BSGS算法 \(Baby Step Giant Step\)算法,即大步小步算法,缩写为\(BSGS\) 拔山盖世算法 它是用来解决这样一类问题 \(y^x = z (mod\ p)\),给定\(y ...
- 【UOJ#450】【集训队作业2018】复读机(生成函数,单位根反演)
[UOJ#450][集训队作业2018]复读机(生成函数,单位根反演) 题面 UOJ 题解 似乎是\(\mbox{Anson}\)爷的题. \(d=1\)的时候,随便怎么都行,答案就是\(k^n\). ...
- emwin之WM_DeleteWindow函数使用注意事项
@2018-12-21 [小记] 在当前窗口P创建一新窗口C后再使用函数 WM_DeleteWindow 删除该C窗口时,删除窗口句柄必须是根句柄,如果使用 WM_GetClientWindow(pM ...
- 关于一些没做出来的SBCF题
这里是一些我SB没做出来的CF水题. 其实这些题思维量还不错,所以写在这里常来看看…… 不一定每题代码都会写. CF1143C Queen 其实只要注意到如果一个点开始能被删,那一直就能被删:一个点开 ...
- AtCoder arc061C Snuke's Subway Trip
大意: 给你一张无向图,边有种类. 当你第一次/重新进入某种边时费用 + 1 在同一种边之间行走无费用. 求 1 到 n 的最小费用. 嗯...乍一看有一个很直观的想法:记录每个点的最短路的上一条边的 ...
- (转)轻松学,Java 中的代理模式及动态代理
背景:讲到反射机制,肯定会想到动态代理. 轻松学,Java 中的代理模式及动态代理 代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强.值得注意的是,代理类和被代理类应该 ...