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搭建rtmp直播服务器实现代码
Mar 31 Servers
nginx搭建图片服务器的过程详解(root和alias的区别)
Mar 31 Servers
小程序后台PHP版本部署运行 LNMP+WNMP
Apr 01 Servers
关于nginx 实现jira反向代理的问题
Sep 25 Servers
教你快速构建一个基于nginx的web集群项目
Nov 27 Servers
Nginx图片服务器配置之后图片访问404的问题解决
Mar 21 Servers
Linux、ubuntu系统下查看显卡型号、显卡信息详解
Apr 07 Servers
CentOS7安装GlusterFS集群以及相关配置
Apr 12 Servers
Win10 Anaconda安装python-pcl
Apr 29 Servers
排查Tomcat进程假死的问题
May 06 Servers
Nginx限流和黑名单配置
May 20 Servers
netty 实现tomcat的示例代码
Jun 05 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
DC动漫人物排行
2020/03/03 欧美动漫
PHP 多进程 解决难题
2009/06/22 PHP
PHP学习笔记之二
2011/01/17 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
php中preg_match的isU代表什么意思
2015/10/01 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
Python读写unicode文件的方法
2015/07/10 Python
python的中异常处理机制
2018/08/30 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
应届生污水处理求职信
2013/11/06 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
四风查摆剖析材料
2014/10/10 职场文书
出纳岗位职责
2015/01/31 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python