Nginx流量控制

文章目录

  • Nginx流量控制
    • 一、流量控制概念
    • 二、Nginx流量限制实战
      • 1、普通的nginx流量限制
      • 2、基于代理的nginx流量限制
    • 三、Nginx流量限制实战(基于代理的白名单的流量限制)

一、流量控制概念

 流量控制:是Nginx中一个很实用的功能,我们可以用来限制用户在给定时间内http请求数量,可用作安全目的,比如减慢暴力破解速率,主要是为了保护上游服务器不被同时太多用户请求压垮。

 nginx如何限流:Nginx的流量限制使用漏桶算法,该算法在通讯和分组交换计算机网络中广泛使用,用以处理带宽有限时的突发情况。就好比,向一个桶底漏水的水桶里倒水一样。如果桶口倒水的速率大于桶底的漏水速率,桶里面的水将会溢出;同样,在请求处理方面,水代表来自客户端的请求,水桶代表根据”先进先出调度算法”(FIFO)等待被处理的请求队列,桶底漏出的水代表离开缓冲区被服务器处理的请求,桶口溢出的水代表被丢弃和不被处理的请求。

流量限制通过ngx_http_limit_req_module模块实现
两个主要指令是 limit_req_zonelimit_req
limit_req_zone 定义流量限制相关的参数,通常在http块中定义,使其可以在多个上下文中使用。
limit_req 启用流量限制
limit_req_zone需要以下三个参数:
Key——定义应用限制的请求特征,$binary_remote_addr,以二进制的形式保存客户端IP地址。
Zone——定义用于存储每个IP地址状态以及被限制请求URL访问频率的共享内存区域。定义分为两个部分:通过zone=keyword标识区域的名字,以及冒号后面跟区域大小。
Rate——定义最大请求速率。

示例:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
这定义了流量限制,意思是定义了一个名字为mylimit大小为10M的区域,每个IP地址被限制为每秒只能请求10次,更准确地说,在前一个请求的100毫秒内不能请求该URL,$binary_remote_addr,以二进制的形式保存客户端IP地址。

二、Nginx流量限制实战

1、普通的nginx流量限制

环境:
两台虚拟机:
虚拟机1:服务端,安装nginx,完成流量限制配置。
虚拟机2:充当客户端,访问服务端,验证流量限制。

操作:

虚拟机1
1)安装并启动nginx
2)修改主配置文件nginx.conf,在http块中添加流量限制功能

[root@localhost ~]# vim /etc/nginx/nginx.conf

每个IP地址被限制为每秒只能请求1次,若一秒内请求多次将进行流量限制。

3)编写子配置文件limit.conf

[root@localhost ~]# vim /etc/nginx/conf.d/limit.conf

4)重新加载nginx的配置文件

[root@localhost ~]# nginx -s reload

5)创建默认发布目录以及网页内容,需与配置相对应

[root@localhost ~]# mkdir /limit
[root@localhost ~]# echo "limit,limit,limit" > /limit/index.html

虚拟机2
快速多次访问虚拟机1,验证流量限制


当快速访问服务器时,第一次正常,后面的访问速率超出了速率1r/sd的设置,显示503,说明流量限制配置成功

2、基于代理的nginx流量限制

环境:
三台虚拟机:
虚拟机1:服务端,安装nginx,充当真正的web服务。
虚拟机2:代理服务器,安装nginx,配置代理功能和流量限制功能。
虚拟机3:充当客户端,访问代理服务器,验证流量限制。

操作:

虚拟机1
1)安装并启动nginx
2)主配置文件内容,默认的就好

3)编写子配置文件limit.conf

[root@localhost ~]# vim /etc/nginx/conf.d/limit.conf

4)重新加载nginx的配置文件

[root@localhost ~]# nginx -s reload

5)创建默认发布目录以及网页内容,需与配置相对应

[root@localhost ~]# mkdir /limit
[root@localhost ~]# echo "limit,limit,limit" > /limit/index.html

虚拟机2
1)安装并启动nginx
2)修改主配置文件nginx.conf

[root@localhost ~]# vim /etc/nginx/nginx.conf

3)编写子配置文件

[root@localhost ~]# vim /etc/nginx/conf.d/proxy.conf

4)重新加载nginx的配置文件

[root@localhost ~]# nginx -s reload

虚拟机3
快速多次访问虚拟机2,验证基于代理的流量限制

当快速访问代理服务器时,第一次正常,后面的访问速率超出了速率1r/sd的设置,显示503,说明基于代理的流量限制配置成功

三、Nginx流量限制实战(基于代理的白名单的流量限制)

 通过将基本的“流量限制”与Nginx的白名单功能配合使用,从而可以实现更细粒度的流量限制。
 通过使用白名单功能,对任何不在白名单内的ip请求强制执行流量限制。

环境:
四台虚拟机:
虚拟机1:服务器端。安装nginx充当真正的web服务。
虚拟机2:代理服务器。安装nginx,配置代理功能,流量限制功能和白名单功能。
虚拟机3:充当白名单里允许的客户端,访问代理服务器,验证白名单流量限制。
虚拟机3:充当白名单以外的客户端,访问代理服务器,验证白名单流量限制。

虚拟机1
与上文的基于代理的流量限制一样,这里不再赘述。

虚拟机2

与上文的基于代理的流量限制一样,只需修改主配合文件nginx.conf


这个例子同时使用了geo和map指令。geo块将给在白名单中的IP地址对应的 $ limit变量分配一个值0,给其它不在白名单中的分配一个值1。然后我们使用一个map映射将这些值转为key,如下:
如果$ limit变量的值是0,$ limit_key变量将被赋值为空字符串
如果$ limit变量的值是1,$ limit_key变量将被赋值为客户端二进制形式的IP地址
两个指令配合使用,白名单内IP地址的$limit_key变量被赋值为空字符串,不在白名单内的被赋值为客户端的IP地址。当limit_req_zone后的第一个参数是空字符串时,不会启用“流量限制”功能,所以虚拟机3:192.168.58.155不会被限制。其它所有IP地址都会被限制到每秒只能有1个请求。

重新加载nginx的配置文件

[root@localhost ~]# nginx -s reload

虚拟机3
快速多次访问代理服务器虚拟机2,验证基于白名单的流量限制

虚拟机4
快速多次访问代理服务器虚拟机2,验证基于白名单的流量限制

云计算学习之路——Nginx流量控制相关推荐

  1. 云计算学习之路——LVS负载均衡

    LVS 文章目录 LVS 一. 负载均衡集群介绍 1.集群是什么? 2.负载均衡集群技术 3.负载均衡集群技术实现方式和产品 4.负载均衡实现效果图 5.负载均衡分类 6.四层负载均衡与七层负载均衡的 ...

  2. 云计算学习之路—云计算基础—Linux系统基本操作

    Linux系统基本操作 文章目录 Linux系统基本操作 一.基本命令 1.成分介绍 2.修改主机名 3.创建用户 4.修改用户密码 (1)root用户修改密码 (2)普通用户修改密码 5.用户切换 ...

  3. 云计算学习之路——文件服务NFS

    文件服务--NFS 文章目录 文件服务--NFS 一.NFS介绍 二.原理 三.NFS服务部署 1.服务端 ① 关闭防火墙和selinux ②安装nfs和rpc服务 ③创建共享目录,并在目录下创建测试 ...

  4. Docker学习之路04:创建定制Nginx镜像

    Docker学习之路04:创建定制Nginx镜像 Docker学习路线传送门: Docker学习之路01:Docker的安装 Docker学习之路02:阿里云镜像加速器 Docker学习之路03:Do ...

  5. Docker学习之路02:阿里云镜像加速器

    阿里云镜像加速器 Docker学习路线传送门: Docker学习之路01:Docker的安装 Docker学习之路02:阿里云镜像加速器 Docker学习之路03:Docker的常用命令 Docker ...

  6. docker 虚拟机搭建mongodb一主一从一复制_云计算学习路线图素材课件:Docker容器应用场景分析...

    Docker容器是一个开源的应用容器引擎,它能够自动执行重复性任务,例如搭建和配置开发环境,用户可以方便地创建和使用容器,还可以进行版本管理.复制.分享.修改.有很多初学云计算的同学不清楚Docker ...

  7. 小白怎么学习云计算?2020云计算学习大纲

    当下,云计算产业高速发展,云计算可以实现信息资源的集中管理.按需供给."管家式"贴身服务和共享共创.在技术层面,互联网将为整个信息处理.资源采集和数据运算提供环境;在商业模式方面, ...

  8. My Plan——大数据学习之路

    大数据学习之路 本文简介 相关书籍 计算机基础 数据结构与算法 计算机组成原理 操作系统 计算机网络 数据库 JAVA Python Linux 大数据 其他 本科专业课程安排 学习计划 计划 总结 ...

  9. 《程序员》5期全新改版,邀您踏上云计算应用之路!

    本期封面报道:云计算应用之路 云计算,作为近年来广受关注的话题,其本质是一种灵活.高效.低成本.节能的信息运作方式,借助基于互联网的一系列创新技术,存储.计算.软件.管理.网络.信息等各类资源,以服务 ...

  10. alin的学习之路:面试题 计算机网络相关

    alin的学习之路:面试题 计算机网络相关 介绍下proactor和reactor reactor:同步IO proactor:异步IO Reactor框架中用户定义的操作是在实际操作之前调用的.比如 ...

最新文章

  1. 线程调度 java_Java多线程--线程的调度
  2. qt 文件 时间 倒序排列_win7电脑敬业签便签软件分类标签里的内容如何按提醒时间排列?...
  3. python语言与c语言相比在分支结构上有什么不同_大工20春 C/C 语言程序设计 在线作业3 - 百度文库...
  4. boost::gil::threshold_truncate用法的测试程序
  5. C++运算符重载 实现有理数(分数)的加减法
  6. 老王学linux-ftp
  7. mybatis 多租户saas_彻底理解微商城多租户Saas架构设计
  8. o oia ospf 路由优先_CCNP理论之OSPF协议(二)
  9. springboot整合Apollo
  10. 从医疗数字化转型谈何为中台
  11. SQL Server 2017 AlwaysOn AG 自动初始化(七)
  12. 热血江湖游戏窗口化的方法
  13. multisim二极管_每日干货——光敏二极管传感器
  14. iOS开发-思维导图(初级)
  15. 浅析百度有啊生活平台未来发展的八大潜力特征
  16. 曙光服务器怎么进入bios_怎么进入bios,教您怎么进入bios
  17. 上班第一天(2)--一个程序员的成长史(11)
  18. PKI(公、私钥加密,数字签名、数字证书)技术理解
  19. python满天星效果图_客厅满天星地砖铺贴效果图 大厅瓷砖四角满天星造型图片...
  20. Spring Integration学习笔记:简介

热门文章

  1. win7怎么把计算机图标下的箭头掉,告诉你win7如何去除快捷方式小箭头
  2. Yy And WJM
  3. C# E-Mail邮件发送
  4. [MAE]Masked Autoencoders掩膜自编码器
  5. HTML+CSS+JS制作一个迅雷看看电影网页设计实例 ,排版整洁,内容丰富,主题鲜明,简单的网页制作期末作业
  6. Xcode8 注释 快捷键
  7. 除了方文山,用TA你也能帮周杰伦写歌词了
  8. Unity 自动化构建方案:一键实现版本管理与打包、压缩
  9. php smarty 后台,PHP Smarty
  10. PUN 2 菜鸟养成记 2主服务