首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何限制 Nginx下载速率?

如何限制 Nginx下载速率?

作者头像
用户1560186
发布于 2019-12-04 11:39:35
发布于 2019-12-04 11:39:35
8.4K00
代码可运行
举报
文章被收录于专栏:运维录运维录
运行总次数:0
代码可运行

默认情况下你的服务器有多少网络带宽(上行),Nginx就能消耗掉多少,来者不拒。

假设你的服务商为你的服务器提供 10Mbit/s上下行对等的网络带宽,你希望通过HTTP方式从你的VPS服务器下载2GB的备份文件。

那么你会得到大约 1.25MB/s左右的下载速度(1Byte等于8Bit),这个下载速度确实很爽。

但是这带来了另外一个问题,由于你下载文件占用了VPS服务器全部网络带宽,那么其他用户将无法访问你的服务器,或者访问速度非常缓慢。

你可以把上面的场景替换到公司某些业务上,这样的结果是我们不能接受的,所以需要一种机制,它能够限制每个HTTP连接所使用的最大速率(带宽)。例如将示例中最大下载速度限制在 512KB/s

操作步骤

1. nginx配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat /etc/nginx/conf.d/default.conf

server {

    #..其它配置项目省略

    location /download {
        limit_rate 512k;
    }

    #..其它配置项目省略
}

还可以再优化一下,例如 前10MB 不限速,超过则开始限速。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {

    #..其它配置项目省略
    
    location /download {
             limit_rate_after 10240K;
        limit_rate 512k;
    }
}

2. 重启 nginx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nginx -t && nginx reload

3. 验证

最大下载速度限制在 512KB/s 以内。

限速相关指令

1. limit_rate 指令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
语法: limit_rate rate;
默认值: limit_rate 0;
使用字段: http, server, location, if in location
功能: 该指令用于限制向客户端传输数据的速度,单位是Byte/s每秒传输的字节数,设置0禁用限制功能。

2. limit_rate_after 指令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
语法: 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指令,可以在触发规则后启用限速功能。
  • 限速功能只能限制单个HTTP连接,可以配合限制连接数模块使用。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Mybatis报Invalid bound statement,终于被我找到原因了
SQL语句是写在XML里面的,ResultMap写了一百多行,整个文件上千行。代码混乱不好管理,就计划升级到MyBatis Plus。
大风写全栈
2024/11/29
1.7K0
Mybatis报Invalid bound statement,终于被我找到原因了
从零搭建SpringBoot+MyBatis+MySQL工程
使用依赖:web(前后端交互)、mybatis(持久层)、mysql(数据库驱动)
小锋学长生活大爆炸
2020/09/07
4240
从零搭建SpringBoot+MyBatis+MySQL工程
Mybatis mapper动态代理解决方案
我们在使用Mybatis的时候,获取需要执行的SQL语句的时候,都是通过调用xml文件来获取,例如:User user = (User) sqlSession.selectOne("cn.ddnd.www.Entity.User.getUser", "xue8@qq.com");。这种方式是通过字符串去调用标签定义的SQL语句,第一容易出错,第二是当xml当中的id修改过后你不知道在程序当中有多少个地方使用了这个id,需要手动一一修改。后来Mybatis推出了Mapper动态代理方式,只需要编写Mapper接口(相当于Dao层),由Mybatis框架根据接口定义创建接口的动态代理对象。
科技新语
2024/06/03
1520
Spring Boot整合MyBatis(保姆级教程)
本文通过 Spring Boot + MyBatis 实现一个用户管理的例子,来带大家入门 MyBatis。本教程适合小白入手,文中如有差错还请各位不吝赐教,大家一起学习,共同进步。
astonishqft
2023/03/08
9740
Spring Boot整合MyBatis(保姆级教程)
Mybatis的dao层实现 接口代理方式实现规范+plugins-PageHelper
Mapper接口开发只需要程序员编写Mapper接口而不用具体实现其代码(相当于我们写的Imp实现类)
一只胡说八道的猴子
2020/11/12
3540
Mybatis的dao层实现 接口代理方式实现规范+plugins-PageHelper
SpringBoot 整合mybatis操作数据库
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
jwangkun
2021/12/23
3450
【愚公系列】2023年03月 Java教学课程 116-Mybatis(动态代理和动态SQL)
Mybatis的动态代理是指在运行时动态生成DAO接口的实现类,这个实现类不需要手动编写,而是由Mybatis框架自动生成。
愚公搬代码
2023/04/03
3690
【愚公系列】2023年03月 Java教学课程 116-Mybatis(动态代理和动态SQL)
spring boot 整合mybatis 提示Invalid bound statement 解决记录
在spring boot 整合 mybatis 的时候提示。org.apache.ibatis.binding.BindingException: Invalid bound statement 。
凯哥Java
2019/06/28
2.7K0
「2020最新」Spring最易学习教程 4—整合Mybatis 事务控制
到目前为止web.xml中出现的标签:servlet filter listener context-param。
鹿老师的Java笔记
2020/08/06
3730
【框架】[MyBatis]DAO层只写接口,不用写实现类
团队开发一个项目,由老大架了一个框架,遇到了DAO层不用写接口了,我也是用了2次才记住这个事的,因为自己一直都是习惯于写DAO层的实现类,所以,习惯性的还是写了个实现类。于是遇到错误了。
谙忆
2021/01/21
6150
【框架】[MyBatis]DAO层只写接口,不用写实现类
Mybatis框架复习大纲【面试+提高】
Mybatis框架复习大纲【面试+提高】 1.MyBatis面试题汇总 1.1 JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的? ① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。 解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。 ② Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。 解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分
Java帮帮
2018/03/30
1.2K0
Mybatis框架复习大纲【面试+提高】
MyBatis学习笔记(一) --- MyBatis入门
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 
挽风
2021/04/13
1.4K0
MyBatis学习笔记(一) --- MyBatis入门
MyBatis常见报错问题记录汇总(例:org. apache. ibatis.binding.BindingException_ Invalid bound statement (not found
最常见的报错就是这个了: org. apache. ibatis.binding.BindingException: Invalid bound statement (not found): 找不到绑定的statement。 简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到对应的方法id。 请按照如下步骤检查:
共饮一杯无
2022/11/28
7.6K0
MyBatis常见报错问题记录汇总(例:org. apache. ibatis.binding.BindingException_ Invalid bound statement (not found
跟我一起学mybatis(2)
​ 采用 Mybatis 的代理开发方式实现 DAO 层的开发,这种方式是我们后面进入企业的主流。
楠羽
2022/11/18
4230
跟我一起学mybatis(2)
MyBatis常见面试题总结
(原创不易,你们对阿超的赞就是阿超持续更新的动力!) (以免丢失,建议收藏) (------------------------------------------------------------------------) 什么是MyBatis Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句,可以严格控制sql执行性能,灵活度高。 作为一个半ORM框架,MyBatis 可以使用
是阿超
2021/10/21
2K0
浅谈Mybatis持久化框架在Spring、SSM、SpringBoot整合的演进及简化过程
最近开始了SpringBoot相关知识的学习,作为为目前比较流行、用的比较广的Spring框架,是每一个Java学习者及从业者都会接触到一个知识点。作为Spring框架项目,肯定少不了与数据库持久层的整合。我们在学习Java初始就被灌输SSM框架(Spring、SpringMVC、Mybatis),我们大概也只是知道Mybatis是与数据库打交道的,但这也只是名词上的理解。
Java_老男孩
2020/08/11
5730
Mybatis常见面试题总结
(1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句,可以严格控制sql执行性能,灵活度高。
全栈程序员站长
2022/06/29
1K0
整合SSM框架应用
settings-build-compiler->勾选build project autoxxx选项
HUC思梦
2020/09/03
7110
整合SSM框架应用
SpringBoot 2.x 集成 Mybatis
首先, SpringBoot 版本是 2.3.0.RELEASE, 数据库用的是 MariaDB
北漂的我
2020/06/09
5850
mybatis-plus/mybatis 自定义 sql 语句、动态 sql
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。在 Java 项目内,配置如下:
create17
2019/11/01
46.5K0
mybatis-plus/mybatis 自定义 sql 语句、动态 sql
推荐阅读
相关推荐
Mybatis报Invalid bound statement,终于被我找到原因了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档