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 相关文章推荐
fastdfs+nginx集群搭建的实现
Mar 31 Servers
Nginx安装完成没有生成sbin目录的解决方法
Mar 31 Servers
Nginx如何配置Http、Https、WS、WSS的方法步骤
May 11 Servers
nginx配置文件使用环境变量的操作方法
Jun 02 Servers
nginx负载功能+nfs服务器功能解析
Feb 28 Servers
Apache Hudi集成Spark SQL操作hide表
Mar 31 Servers
Tomcat starup.bat 脚本实现开机自启动
Apr 20 Servers
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
Jun 01 Servers
Linux中文件的基本属性介绍
Jun 01 Servers
apache虚拟主机配置的三种方式(小结)
Jul 23 Servers
nginx配置指令之server_name的具体使用
Aug 14 Servers
服务器nginx权限被拒绝解决案例
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中并发读写文件冲突的解决方案
2013/10/25 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
django url到views参数传递的实例
2019/07/19 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
python regex库实例用法总结
2021/01/03 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
科室工作个人总结的自我评价
2013/10/29 职场文书
上班迟到检讨书
2014/09/15 职场文书
北京颐和园导游词
2015/01/30 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js
Java后台生成图片的完整步骤
2021/08/04 Java/Android