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 相关文章推荐
centos8安装nginx1.9.1的详细过程
Aug 02 Servers
Nginx进程调度问题详解
Sep 25 Servers
nginx中proxy_pass各种用法详解
Nov 07 Servers
Apache Pulsar结合Hudi构建Lakehouse方案分析
Mar 31 Servers
Kubernetes关键组件与结构组成介绍
Mar 31 Servers
OpenStack虚拟机快照和增量备份实现方法
Apr 04 Servers
nginx日志格式分析和修改
Apr 28 Servers
centos7安装mysql5.7经验记录
May 02 Servers
Apache SeaTunnel实现 非CDC数据抽取
May 20 Servers
Windows7下FTP搭建图文教程
Aug 05 Servers
SpringBoot前端后端分离之Nginx服务器下载安装过程
Aug 14 Servers
windows server2012 R2下安装PaddleOCR服务的的详细步骤
Sep 23 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 时间计算问题小结
2009/01/04 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
九步学会Python装饰器
2015/05/09 Python
用Python写冒泡排序代码
2016/04/12 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
python3爬虫GIL修改多线程实例讲解
2020/11/24 Python
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
运动会广播稿100字
2014/01/11 职场文书
会计工作心得体会
2014/01/13 职场文书
初中家长寄语
2014/04/02 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
热情服务标语
2014/10/07 职场文书
解除租房协议书
2014/12/03 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python