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 相关文章推荐
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
Mar 09 Servers
基于Nginx实现限制某IP短时间访问次数
Mar 31 Servers
nginx proxy_cache 缓存配置详解
Mar 31 Servers
教你快速构建一个基于nginx的web集群项目
Nov 27 Servers
nginx负载功能+nfs服务器功能解析
Feb 28 Servers
nginx.conf配置文件结构小结
Apr 08 Servers
鲲鹏 CentOS 7 安装Python3.7
May 11 Servers
windows系统安装配置nginx环境
Jun 28 Servers
TaiShan 200服务器安装Ubuntu 18.04的图文教程
Jun 28 Servers
Zabbix对Kafka topic积压数据监控的解决方案
Jul 07 Servers
kubernetes集群搭建Zabbix监控平台的详细过程
Jul 07 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 DataGrid 实现代码
2009/08/12 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
详解Python验证码识别
2016/01/25 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
Python实现画图软件功能方法详解
2020/07/28 Python
python利用appium实现手机APP自动化的示例
2021/01/26 Python
CSS3 3D位移translate效果实例介绍
2016/05/03 HTML / CSS
揭牌仪式主持词
2014/03/19 职场文书
财务内勤岗位职责
2014/04/17 职场文书
建设工地安全标语
2014/06/07 职场文书
2014年扶贫工作总结
2014/11/18 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
服务行业标语口号
2015/12/26 职场文书