• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

nginx利用内置模块配置限速限流

Nginx eryajf 1个月前 (08-18) 126°C 已收录 0个评论
本文预计阅读时间 5 分钟

有时候NGINX面对一些特殊的场景时,需要进行一定的限速限流的配置,比如一个官网,可能前端静态文件是非常小的,但是同时配置的还有一些apk包,这些包如果不做任何限制,可能会形成比较大的负载或者带宽的压力,我这边碰到了,今天就来针对这个问题处理一下。

没有限制之前,对应的包下载速度如下:

添加如下配置,进行一定的限制:

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。

现在简单的做一下测试看看下载速度:

可以看到对应的速度已经收到限制,而且是在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的数值。

另外还有其他一些相关限制配置,有需要另行研究:研究地址。


weinxin
扫码订阅本站,第一时间获得更新
微信扫描二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明nginx利用内置模块配置限速限流
喜欢 (1)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
关于作者:
学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!

您必须 登录 才能发表评论!