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服务器添加Systemd自定义服务过程解析
Mar 31 Servers
Nginx如何配置Http、Https、WS、WSS的方法步骤
May 11 Servers
Nginx四层负载均衡的配置指南
Jun 11 Servers
Nginx设置HTTPS的方法步骤 443证书配置方法
Mar 21 Servers
了解Kubernetes中的Service和Endpoint
Apr 01 Servers
nginx lua 操作 mysql
May 15 Servers
windows server 2012安装FTP并配置被动模式指定开放端口
Jun 10 Servers
vscode内网访问服务器的方法
Jun 28 Servers
nginx之queue的具体使用
Jun 28 Servers
使用 DataAnt 监控 Apache APISIX的原理解析
Jul 07 Servers
如何让你的Nginx支持分布式追踪详解
Jul 07 Servers
Windows Server 2012 R2服务器安装与配置的完整步骤
Jul 15 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中的加密功能
2006/10/09 PHP
PHP网上调查系统
2006/10/09 PHP
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
php在线代理转向代码
2012/05/05 PHP
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
Yii清理缓存的方法
2016/01/06 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
Javascript 日期处理之时区问题
2009/10/08 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
Django实现基于类的分页功能
2019/10/31 Python
Python实现银行账户资金交易管理系统
2020/01/03 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
介绍一下如何优化MySql
2016/12/20 面试题
儿科主治医生个人求职信
2013/09/23 职场文书
学前教育毕业生自荐信
2013/10/29 职场文书
自我评价怎么写好呢?
2013/12/05 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
入党函调证明材料
2014/12/24 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python