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
使用 Apache 反向代理的设置技巧
Jan 18 Servers
Apache Hudi数据布局黑科技降低一半查询时间
Mar 31 Servers
Apache Hudi的多版本清理服务彻底讲解
Mar 31 Servers
使用kubeadm命令行工具创建kubernetes集群
Mar 31 Servers
CentOS7安装GlusterFS集群以及相关配置
Apr 12 Servers
Tomcat配置访问日志和线程数
May 06 Servers
Python安装及建立虚拟环境的完整步骤
Jun 25 Servers
Windows Server 2008配置防火墙策略详解
Jun 28 Servers
搭建zabbix监控以及邮件报警的超级详细教学
Jul 15 Servers
Win10系统搭建ftp文件服务器详细教程
Aug 05 Servers
Valheim服务器 Mod修改安装教程 【ValheimPlus】
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
第一个无线电台是由谁发明的
2021/03/01 无线电
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
FormValidate 表单验证功能代码更新并提供下载
2008/08/23 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
Python Tkinter GUI编程入门介绍
2015/03/10 Python
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
Python管理Windows服务小脚本
2018/03/12 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
SQL Server面试题
2013/04/04 面试题
优秀中专生推荐信
2013/11/17 职场文书
实习自我评价怎么写
2013/12/02 职场文书
职业生涯规划书范文
2014/03/10 职场文书
社区工作者演讲稿
2014/05/23 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
升学宴学生致辞
2015/07/27 职场文书
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python