nginx配置限速限流基于内置模块


Posted in Servers onMay 02, 2022

有时候 NGINX 面对一些特殊的场景时,需要进行一定的限速限流的配置,比如一个官网,可能前端静态文件是非常小的,但是同时配置的还有一些 apk 包,这些包如果不做任何限制,可能会形成比较大的负载或者带宽的压力,我这边碰到了,今天就来针对这个问题处理一下。

没有限制之前,对应的包下载速度如下:

nginx配置限速限流基于内置模块

添加如下配置,进行一定的限制:

http {
    ...#省略
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    ...#省略
}
server {
    listen 80 default;
    server_name localhost;
    location ~ "^/test/app/" {
         limit_conn addr 6;
        limit_rate_after 10m;
        limit_rate 1200k;
        limit_conn_status 499;
        limit_conn_log_level warn;
        root  /app;
    }
}

说明:

http 区域,我这里使用的是 1.15 版本的,默认已经安装了对应的模块ngx_http_limit_conn_module。

limit_conn_zone:是一个固定的名称,下边调用的时候与之对应。 $binary_remote_addr:表示通过

remote_addr 这个标识来做限制,“binary_” 的目的是缩写内存占用量,是限制同一客户端 ip 地址。

zone=addr:10m:示生成一个大小为 10M,名字为 addr 的内存区域,用来存储访问的频次信息。

server 区域,可以直接写在 server 区域内,表示限制所有,也可以写到对应的 location 当中,以表示单独区域限制。

limit_conn:表示单个 IP 限制最大连接数为 6。 limit_rate_after:表示请求前 10m 大小时不限速。

limit_rate:表示单个连接最大连接带宽限制为 1200k。 limit_conn_status:设置拒绝请求的返回值。值只能设置400 到 599 之间(默认是 503)。 limit_conn_log_level:定义日志级别,默认 error。

现在简单的做一下测试看看下载速度:

nginx配置限速限流基于内置模块

可以看到对应的速度已经收到限制,而且是在 10M 之后速度开始慢慢下降,直至达到限制的位置。现在可以简单压测看下情况:

$ ab -n 10 -c 10 http://www.test.com/res/app/app-xiaomi-release.apk

这条命令表示请求 10 次对应资源,并发为 10。监控对应日志,看到如下结果,因为我们定义的最大并发是 6,所以将会有 4 个失败,并返回 499 状态码,然后有 6 个成功。

$tailf -n 100 a |awk -F "," '{print  $6}'
"response": "499"
"response": "499"
"response": "499"
"response": "499"
"response": "200"
"response": "200"
"response": "200"
"response": "200"
"response": "200"
"response": "200"

另外在压测命令之后,还有一些输出可以参考:

Total transferred:      403483116 bytes
HTML transferred:       403481400 bytes
Requests per second:    0.18 [#/sec] (mean)
Time per request:       56865.501 [ms] (mean)
Time per request:       5686.550 [ms] (mean, across all concurrent requests)
Transfer rate:          6929.10 [Kbytes/sec] received

其他的不说了,只看最后一条,可以看到总的对外输出是大约7M/s,正好符合单条限制 1.2M/s 乘以 6 的数值。

总结

到此这篇关于nginx配置限速限流基于内置模块的文章就介绍到这了!


Tags in this post...

Servers 相关文章推荐
查看nginx配置文件路径和资源文件路径的方法
Mar 31 Servers
学习nginx基础知识
Sep 04 Servers
nginx内存池源码解析
Nov 20 Servers
详解nginx location指令
Jan 18 Servers
Nginx的基本概念和原理
Mar 21 Servers
Nginx禁止ip访问或非法域名访问
Apr 07 Servers
Nginx配置根据url参数重定向
Apr 11 Servers
CentOS7安装GlusterFS集群以及相关配置
Apr 12 Servers
Windows Server 2019 域控制器安装图文教程
Apr 28 Servers
netty 实现tomcat的示例代码
Jun 05 Servers
Windows Server 2012 R2服务器安装与配置的完整步骤
Jul 15 Servers
keepalived + nginx 实现高可用方案
Dec 24 Servers
Nginx配置之禁止指定IP访问
centos7安装mysql5.7经验记录
May 02 #Servers
使用 Docker Compose 构建复杂的多容器App
Apr 30 #Servers
搭建Yolov5服务器
KVM基础命令详解
Apr 30 #Servers
Win10 Anaconda安装python-pcl
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
Apr 29 #Servers
You might like
PHP与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
解析php中memcache的应用
2013/06/18 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
WebGame《逆转裁判》完整版 代码下载(1月24日更新)
2007/01/29 Javascript
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
vue-for循环嵌套操作示例
2019/01/28 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python实现寻找最长回文子序列的方法
2018/06/02 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
python 用struct模块解决黏包问题
2020/11/07 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
电大毕业自我鉴定
2014/02/03 职场文书
大学生自荐书范文
2015/03/05 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android