默认情况下你的服务器有多少网络带宽(上行
),Nginx就能消耗掉多少,来者不拒。
假设你的服务商为你的服务器提供 10Mbit/s
上下行对等的网络带宽,你希望通过HTTP
方式从你的VPS服务器下载2GB
的备份文件。
那么你会得到大约 1.25MB/s
左右的下载速度(1Byte等于8Bit),这个下载速度确实很爽。
但是这带来了另外一个问题,由于你下载文件占用了VPS服务器全部网络带宽,那么其他用户将无法访问你的服务器,或者访问速度非常缓慢。
你可以把上面的场景替换到公司某些业务上,这样的结果是我们不能接受的,所以需要一种机制,它能够限制每个HTTP连接所使用的最大速率(带宽)。例如将示例中最大下载速度限制在 512KB/s
。
1. nginx配置文件
cat /etc/nginx/conf.d/default.conf server { #..其它配置项目省略 location /download { limit_rate 512k; } #..其它配置项目省略 }
还可以再优化一下,例如 前10MB 不限速,超过则开始限速。
server { #..其它配置项目省略 location /download { limit_rate_after 10240K; limit_rate 512k; } }
2. 重启 nginx
nginx -t && nginx reload
3. 验证
最大下载速度限制在 512KB/s
以内。
1. limit_rate 指令
语法: limit_rate rate; 默认值: limit_rate 0; 使用字段: http, server, location, if in location 功能: 该指令用于限制向客户端传输数据的速度,单位是Byte/s每秒传输的字节数,设置0禁用限制功能。
2. limit_rate_after 指令
语法: limit_rate_after size; 默认值: limit_rate_after 0; 使用字段: http, server, location, if in location 功能: 该指令用于设置一个阀值,当达到条件(字节)后开始限速。
需要注意的是,上面的限制指令只是针对一个连接的设定,如果客户端使用两个连接(并发),那么总速率将会是该指令设置值的两倍。
不过nginx 提供了一个另外一个模块 ngx_http_limit_conn_module 用于限制连接数。
参考文档
http://nginx.org/en/docs/http/ngx_http_core_module.html
http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
最后来总结下文章中的知识点
limit_rate
指令用于配置限速功能,单位Byte/s
。limit_rate_after
指令,可以在触发规则后启用限速功能。限制连接数模块
使用。本文分享自微信公众号 - 运维录(gh_70d95b8f5f7c),作者:东南
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2019-11-25
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句