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安装完成没有生成sbin目录的解决方法
Mar 31 Servers
利用Nginx代理如何解决前端跨域问题详析
Apr 02 Servers
windows下快速安装nginx并配置开机自启动的方法
May 11 Servers
Nginx反向代理至go-fastdfs案例讲解
Aug 02 Servers
Nginx设置HTTPS的方法步骤 443证书配置方法
Mar 21 Servers
iSCSI服务器CHAP双向认证配置
Apr 01 Servers
Nginx+Tomcat负载均衡多实例详解
Apr 11 Servers
nginx lua 操作 mysql
May 15 Servers
Ubuntu安装Mysql+启用远程连接的完整过程
Jun 21 Servers
超越Nginx的Web服务器caddy优雅用法
Jun 21 Servers
zabbix如何添加监控主机和自定义监控项
Aug 14 Servers
修改Nginx配置返回指定content-type的方法
Sep 23 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采集利器 Snoopy 试用心得
2011/07/03 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
2014/08/19 PHP
php实现购物车功能(下)
2016/01/05 PHP
js操作textarea方法集合封装(兼容IE,firefox)
2011/02/22 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
Javascript函数式编程语言
2015/10/11 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
JavaScript遍历求解数独问题的主要思路小结
2016/06/12 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
vue+element实现批量删除功能的示例
2018/02/28 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
C++的几个面试题附答案
2016/08/03 面试题
成品仓管员岗位职责
2013/12/11 职场文书
求职简历中自我评价
2014/01/28 职场文书
学习决心书
2014/03/11 职场文书
经典婚礼主持词
2014/03/13 职场文书
中介业务员岗位职责
2014/04/09 职场文书
英文演讲稿
2014/05/15 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
查摆问题自查报告范文
2014/10/13 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL