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 相关文章推荐
Linux安装Nginx步骤详解
Mar 31 Servers
浅谈Nginx 中的两种限流方式
Mar 31 Servers
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
May 27 Servers
图文详解Nginx版本平滑升级方案
Sep 15 Servers
NGINX 权限控制文件预览和下载的实现原理
Jan 18 Servers
Apache Linkis 中间件架构及快速安装步骤
Mar 16 Servers
Nginx的基本概念和原理
Mar 21 Servers
docker-compose部署Yapi的方法
Apr 08 Servers
搭建Yolov5服务器
Apr 30 Servers
centos环境下nginx高可用集群的搭建指南
Jul 23 Servers
解决ubuntu安装软件时,status-code=409报错的问题
Dec 24 Servers
nginx sticky实现基于cookie负载均衡示例详解
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
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
随机头像PHP版
2006/10/09 PHP
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
php处理斐波那契数列非递归方法
2012/02/04 PHP
php+ajax实现无刷新分页
2015/11/18 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
有趣的javascript数组定义方法
2010/09/10 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
详解如何在Javascript和Sass之间共享变量
2019/11/13 Javascript
Python中文件遍历的两种方法
2014/06/16 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
巴黎一票通:The Paris Pass
2018/02/10 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
英文版销售经理个人求职信
2013/11/20 职场文书
夜不归宿检讨书
2014/02/25 职场文书
留学顾问岗位职责
2014/04/14 职场文书
二年级小学生评语
2014/04/21 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技