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
centos8安装nginx1.9.1的详细过程
Aug 02 Servers
HDFS免重启挂载新磁盘
Apr 06 Servers
基于Apache Hudi在Google云构建数据湖平台的思路详解
Apr 07 Servers
Mac电脑OS系统下安装Nginx的详细教程
Apr 14 Servers
nginx配置之并发频次限制
Apr 18 Servers
Nginx HTTP跳转至HTTPS
May 15 Servers
Nginx利用Logrotate实现日志分割
May 20 Servers
使用Apache Camel表达REST服务的方法
Jun 10 Servers
Linux中sftp常用命令整理
Jun 28 Servers
GPU服务器的多用户配置方法
Jul 07 Servers
WIN10使用IIS部署ftp服务器详细教程
Aug 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
德生9700DX电路分析
2021/03/02 无线电
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
js版本A*寻路算法
2006/12/22 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
vue 引用自定义ttf、otf、在线字体的方法
2019/05/09 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
Python中的rfind()方法使用详解
2015/05/19 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
利用python修改json文件的value方法
2018/12/31 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
优秀求职信范文分享
2013/12/19 职场文书
银行门卫岗位职责
2013/12/29 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫
mysql 获取相邻数据项
2022/05/11 MySQL
Python中requests库的用法详解
2022/06/05 Python