当前位置: 首页 > article >正文

Nginx中实现流量控制(限制给定时间内HTTP请求的数量)示例

场景

流量控制

流量限制 (rate-limiting),可以用来限制用户在给定时间内HTTP请求的数量。

流量限制可以用作安全目的,比如可以减慢暴力密码破解的速率,

更常见的情况是该功能被用来保护上游应用服务器不被同时太多用户请求所压垮。

流量限制配置两个主要的指令,limit_req_zone和limit_req,

limit_req_zone 指令设置流量限制和内存区域的参数,但实际上并不限制请求速率。

limit_req 指令启用流量限制,应用在特定的 location 或者 server 块。

limit_req_zone指令通常在HTTP块中定义,它需要以下三个参数。

Key:

定义应用限制的请求特性。通过 Nginx 的内置变量$binary_remote_addr,可以获取到访问你的客户端IP地址,

即其作用就是保存客户端IP地址的二进制形式。

Zone:

定义用于存储每个IP地址状态以及被限制请求URL访问频率的内存区域(也就是说它是用来存储我获取的这些IP地址)。

通过 zone=keyword 标识区域的名字(自定义),以及冒号后面跟区域大小。

16000个IP地址的状态信息,大约需要1MB。

Rate:

连接请求。速率不能超过每秒1个请求。

注:

博客:
霸道流氓气质-CSDN博客

实现

示例,模拟两台服务器,一台作为后端服务器,一台作为代理服务器,这里在windows电脑上,使用两个nginx启动两个端口进行模拟。

在实际生产中,我们一般都会在代理服务器上做流量控制,因为我们客户端的请求是都是要经过代理服务器的,

如果是在后端服务器做限流,那么当有多台后端服务器的时候,就意味着每台后端服务器都得做限流配置,会浪费很多时间。

编写一个简单的index.html,用于服务端返回的测试页面

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
    <title>最简单的HTML页面</title>
</head>
<body>
    <h1>欢迎来到我的网页</h1>
    <p>这是一个简单的HTML页面示例。</p>
</body>
</html>

修改后端服务器的nginx的配置文件

    server {
        listen       800;
        server_name  127.0.0.1;

        location / {
            root   D:/test/;
   try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

注意这里nginx在windows上,上面index.html在D盘下面的test目录下

修改代理服务器的配置 #定义流量限制,每秒处理一个请求limit_req_zone在此,只用作定义和分配存储空间,并不做限流,限流需要limit_req 指令来启用

​
 limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s; 
 upstream test {
       server 127.0.0.1:800 weight=1 max_fails=1 fail_timeout=1;
 }

 server {
        listen       900;
        server_name  127.0.0.1-limit;

        location / {
   limit_req zone=mylimit;  #启用流量限制
   proxy_pass http://test;
   proxy_set_header Host $host:$server_port;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

​

访问测试

可以看到大于1秒1次的请求就会被限制。

并且可以查看代理服务器的错误日志


http://www.kler.cn/a/390294.html

相关文章:

  • 九州未来再度入选2024边缘计算TOP100
  • 「Mac玩转仓颉内测版7」入门篇7 - Cangjie控制结构(下)
  • Oracle 11g rac 集群节点的修复过程
  • rockylinux 8安装 gcc11.2
  • 使用 Sparkle 实现 macOS 应用自定义更新弹窗
  • C语言第九周课——经典算法
  • ChatGLM2-6B微调记录【2】
  • React Native 全栈开发实战班 - 核心组件与导航
  • 【系统架构设计师-2024下半年真题】综合知识-参考答案及部分详解(完整回忆版)
  • C++ 二叉搜索树
  • 设计模式(Unity)——更新中
  • FPGA实现以太网(二)、初始化和配置PHY芯片
  • 攻防世界36-fakebook-CTFWeb
  • 苍穹外卖 数据可视化
  • 标准化 Git 提交信息的约定
  • 17RAL_Visual-Inertial Monocular SLAM with Map Reuse
  • 基础算法练习--滑动窗口(已完结)
  • 分布式环境下宕机的处理方案有哪些?
  • 简单易用的 Node.js Git库
  • Oracle XE命令行创建数据库的一波三折(已解决)
  • 深度学习在推荐系统中的应用
  • Taro React-Native IOS 打包发布
  • 【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线
  • 本地连接IP地址的自主设置指南‌
  • 力扣 LeetCode 209. 长度最小的子数组
  • 传统型视频展台方案分享