一、限速介绍

在生产环境中,为了保护WEB服务器的安全,我们都会对用户的访问做出一些限制,保证服务器的安全及资源的合理分配。

限流(rate limiting)是NGINX众多特性中最有用的,也是经常容易被误解和错误配置的,特性之一访问请求限速。

该特性可以限制某个用户在一个给定时间段内能够产生的HTTP请求数。

请求可以简单到就是一个对于主页的GET请求或者一个登陆表格的POST请求。

用于安全目的上,比如减慢暴力密码破解攻击。通过限制进来的请求速率,并且(结合日志)标记出目标URLs来帮助防范DDoS攻击。

一般地说,限流是用在保护上游应用服务器不被在同一时刻的大量用户请求湮没。

限速说的很笼统,其实限速分为很多种限速方法:

1)下载速度限速

2)单位时间内请求数限制

3)基于客户端的并发连接限速

nginx限速模块

Nginx官方版本限制IP的连接和并发分别有两个模块:

limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket”。

limit_req_conn 用来限制同一时间连接数,即并发限制。

二、应用场景

下载限速:限制现在速度及并发连接数,应用在下载服务器中,保护带宽及服务器的IO资源。

请求限速:限制单位时间内用户访问请求,防止恶意攻击,保护服务器及资源安全。

三、限速原理

漏桶原理

算法思想是:

水(请求)从上方倒入水桶,从水桶下方流出(被处理);
来不及流出的水存在水桶中(缓冲),以固定速率流出;
水桶满后水溢出(丢弃)。

这个算法的核心是:缓存请求、匀速处理、多余的请求直接丢弃。
相比漏桶算法,令牌桶算法不同之处在于它不但有一只“桶”,还有个队列,这个桶是用来存放令牌的,队列才是用来存放请求的。

四、限速实现

1)单位时间内请求数限制

基于IP对下载速率做限制 限制每秒处理1次请求,对突发超过5个以后的请求放入缓存区

http {limit_req_zone $binary_remote_addr zone=baism:10m rate=1r/s;server {location /abc {limit_req zone=baism burst=5 nodelay;}
}
limit_req_zone $binary_remote_addr zone=baism:10m rate=1r/s;

第一个参数:$binary_remote_addr 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址。
第二个参数:zone=baism:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息。
第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的。

limit_req zone=baism burst=5 nodelay;

第一个参数:zone=baism 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。
第二个参数:burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。
第三个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。

3)限制下载速度

server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}location /abc {limit_rate 100k;}}
}

4)综合案例

限制web服务器请求处理为1秒一个,触发值为5;

限制并发连接数为4;

限制下载速度为100.

http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;#基于IP做连接限制  限制同一IP并发为1  下载速度为100Klimit_conn_zone $binary_remote_addr zone=addr:10m;#基于IP对下载速率做限制  限制每秒处理1次请求,对突发超过5个以后的请求放入缓存区 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}location /abc {limit_req zone=one burst=5 nodelay;limit_conn addr 4;limit_rate 100k;}}
}

Nginx 下载限速相关推荐

  1. nginx下载限速,解决下载并发量大导致带宽占满

    nginx下载限速,解决下载并发量大导致带宽占满 原因:文件服务和业务服务在同一台机器上,下载病区视频导致带宽被占满(97M/100M) 解决方式:现在单个请求的带宽 修改nginx配置文件nginx ...

  2. libcurl下载限速编程调研

    目前的业务需求是, 要求下载过程中, 能够恰当控制下载速度? 如何实现? 我想到了libcurl中提供的下载限速选项.现在探讨如下. 我找到Ubuntu 14.04.01的iso大文件, 使用libc ...

  3. 非VIP用户下载限速,原来是这么实现的

    在日常工作之余,二狗子其实还是个隐藏的大触,一手素描画得出神入化,不少看过的小伙伴嗷嗷叫着求分享.为了让更多小粉丝能看到自己的作品,二狗子开发了一个提供有版权的素描稿件的下载网站. 二狗子的小网站,只 ...

  4. android http下载限速,安卓手机端两种让网盘不限速下载方法介绍

    百度网盘已然成为分享型网盘中一家独大的"大佬"了.时代就是这样不管你喜不喜欢,上网总会遇到些百度网盘共享的文件需要下载.然而,百度网盘对免费用户的限速已经到了"感人&qu ...

  5. Aria2-突破百度网盘下载限速

    真的是神器,感谢网友的贡献与分享,做一个简化版的总结 aria2官网(看看就可以,暂时没什么用):https://aria2.github.io/ macOS mac上配置比较简单 安装chrome插 ...

  6. 【IDM+百度网盘助手】突破百度云下载限速,适用于谷歌浏览器【图文+附下载地址】

    百度云下载限速实在是太坑了,能吃好多速度啊!话不多说,方法如下: 1.安装IDM--网址https://www.52pojie.cn/thread-681117-1-1.html 2.安装" ...

  7. 百度网盘——下载限速问题解决方案(油猴(Tampermonkey)+百度网盘直链下载助手+IDM)

    一.基本概念 Tampermonkey(油猴):Tampermonkey插件是一个免费的浏览器扩展和最为流行的用户脚本管理器,拥有适用于 Chrome, Microsoft Edge, Safari, ...

  8. 解除百度网盘下载限速

    title: 解除百度网盘下载限速 date: 2017-08-9 11:00:00 tags: 分享 众所周知的百度网盘为了迫使用户花钱,对用户的下载速度做出了限制.今天我就来分享一个破解限制的好办 ...

  9. Nginx下载、安装与使用

    Nginx下载 简介: Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务(邮件服务). 官网下载地址: https://nginx.org/en/d ...

最新文章

  1. leetcode dfs_深度优先搜索:具有6个Leetcode示例的DFS图遍历指南
  2. html input 传值 request接到值为null,解决jsp向servlet传值为null的问题
  3. C++ Opengl纹理过滤和光照实例源码
  4. 一步步编写操作系统 09 写个mbr
  5. C#4.0 可选参数和命名参数
  6. Vijos P1772 巧妙填数【进制+置换】
  7. 2021 年 五一数学建模比赛 C 题
  8. C功底挑战Java菜鸟入门概念干货(三)
  9. win7修复计算机消失,详细教您win7 aero效果消失了怎么恢复
  10. JavaWeb——JavaScript精讲之DOM、BOM对象与案例实战(动态添加删除表格)
  11. 第三季度编程语言排行榜出炉,它太稳了!
  12. 上海最新消防设施操作员考前必背考点,模拟真题及答案
  13. Debian参考手册(3-4)
  14. 蘑菇街的开源IM:TeamTalk
  15. 百度网盘不限速(小白亲测)
  16. 易语言 图片插入超级列表框_新手教程!如何在PDF文件中插入图像
  17. ORA-02292_主表在有子表外键约束的情况,如何快速批量删除和插入数据?
  18. android 极光推送混淆,android 混淆文件的编写(proguard-rules.pro)
  19. 西游记中出现的女神仙
  20. 云擎未来,智信天下:2023移动云大会分论坛“抢先看”

热门文章

  1. jQuery筛选器常用总结
  2. python学习之自习语法(20180626_update)
  3. Message Queue中的推与拉(转)
  4. CFI Flash, SPI Flash, Nand Flash,Nor Flash的区别和联系
  5. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
  6. Cakephp事件机制尝鲜
  7. [Linux命令]Sed命令参数
  8. java 马士兵 io 代码分析_学习笔记-马士兵java- (IO初步)流
  9. 暴力除法C语言,暴力除法
  10. 7-2 jmu-Java-01入门-取数字 (2 分)