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.mzph.cn/web/59195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ARM Coresight OpenOCD 系列 5 -- arp_examine 使用介绍】

文章目录 OpenOCD arp_examine 使用 OpenOCD arp_examine 使用 因为我们很多时候运行 Openocd 的时候有些 core 还没有启动, 所以最好在配置脚本中添加 -defer-examine这个参数, 如下&#xff1a; #cortex-m33 target create ${_CHIPNAME}.m33 cortex_m -dap ${_CHIPNAME}.da…

数据分析考试怎么考

数据分析在现代商业和学术领域变得越来越重要&#xff0c;为决策提供了坚实的基础。对于那些希望在这一领域发展职业生涯的人来说&#xff0c;通过专业认证来展示自己在数据分析方面的能力无疑是一个明智之举。在众多数据分析认证中&#xff0c;CDA&#xff08;Certified Data …

php 如何将数组转成对象数组

1. 使用 (object) 操作符&#xff1a; “php $array [‘name’ > ‘John’, ‘age’ > 25]; $object (object) $array; // 访问对象属性 echo $object->name; // 输出: John echo $object->age; // 输出: 25 “ 2. 使用 (stdClass)&#xff1a; “php $array …

【AI新领域应用】AlphaFold 2,原子级别精度的蛋白质3D结构预测,李沐论文精读(2021Nature封面,2024诺贝尔奖)

文章目录 AlphaFold 2 —— 原子级别精度的蛋白质3D结构预测背景&#xff08;2024诺奖与AI学习资料&#xff09;1、摘要、导论、写作技巧2、方案&#xff1a;模型&#xff0c;编码器&#xff0c;解码器3、实验&#xff1a;数据集&#xff0c;训练&#xff0c;结果 AlphaFold 2 …

微服务day06

MQ入门 同步处理业务&#xff1a; 异步处理&#xff1a; 将任务处理后交给MQ来进行分发处理。 MQ的相关知识 同步调用 同步调用的小结 异步调用 MQ技术选型 RabbitMQ 安装部署 其中包含几个概念&#xff1a; publisher&#xff1a;生产者&#xff0c;也就是发送消息的一方 …

kafka消费者的消费分区策略有哪些,默认是哪个?

Kafka消费者的分区分配策略主要有以下几种&#xff0c;分别决定了如何将多个分区分配给消费者&#xff1a; 1. Range&#xff08;范围分配&#xff09; 描述&#xff1a;将分区连续地分配给消费者。每个消费者负责一段连续的分区。如果有多个消费者&#xff0c;那么消费者会按…

[ Linux 命令基础 2 ] Linux 命令详解-系统管理命令

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

mysql5常用命令(一)

1、登录mysql (1) mysql -u[用户] -p[密码] -h[登录到哪台数据库] 注意&#xff1a;-p后面不要加空格 [rootOldboy ~]# mysql -uroot -p123456 -h localhost(2) mysql [数据库名] -u[用户] -p[密码] -h[登录到哪台数据库] [rootOldboy ~]# mysql test -uroot -p123456 -…

技术前沿:从强化学习到Prompt Engineering,业务流程管理的创新之路

在数字化转型的大潮中&#xff0c;企业越来越重视业务流程管理&#xff08;BPM&#xff09;的优化。然而&#xff0c;传统的BPM方法面临许多挑战&#xff0c;如优化速度慢、数据需求高、灵活性不足等。国际会议BPMDS 2023和EMMSAD 2023展示了一系列技术和研究亮点&#xff0c;为…

方法论简介

方法论概述 方法论研究和探讨如何进行有效研究、思考和解决问题的一套理论体系和方法框架。 它不仅包括具体的操作步骤、技巧、工具等&#xff0c; 也包括背后的哲学理念、思维方式以及系统化的过程。 方法论帮助人们在面对复杂问题时&#xff0c;通过理性推理和系统化的步…

Linux:vim命令总结及环境配置

文章目录 前言一、vim的基本概念二、vim模式命令解析1. 命令模式1&#xff09;命令模式到其他模式的转换&#xff1a;2&#xff09;光标定位&#xff1a;3&#xff09;其他命令&#xff1a; 2. 插入模式3. 底行模式4. 替换模式5. 视图模式6. 外部命令 三、vim环境的配置1. 环境…

【在Linux世界中追寻伟大的One Piece】多路转接epoll

目录 1 -> I/O多路转接之poll 1.1 -> poll函数接口 1.2 -> poll的优点 1.3 -> poll的缺点 1.4 -> poll示例 1.4.1 -> 使用poll监控标准输入 2 -> I/O多路转接之epoll 2.1 -> 初识epoll 2.2 -> epoll的相关系统调用 2.2.1 -> epoll_cre…

JS爬虫实战之TikTok_Shop验证码

TikTok_Shop验证码逆向 逆向前准备思路1- 确认接口2- 参数确认3- 获取轨迹参数4- 构建请求5- 结果展示 结语 逆向前准备 首先我们得有TK Shop账号&#xff0c;否则是无法抓取到数据的。拥有账号后&#xff0c;我们直接进入登录。 TikTok Shop 登录页面 思路 逆向步骤一般分为…

湘潭大学软件工程算法设计与分析实验-模拟退火算法

文章目录 写在前面代码分析 写在前面 总共是要四份代码&#xff0c;好像都是实现背包问题&#xff0c;前面三个都比较简单直观&#xff0c;朋友上周在机房给我讲解了一下之后&#xff0c;我大概弄清楚了&#xff0c;这周好像是最后一次算法课了&#xff0c;所以明天我得把剩下…

自由学习记录(20)

PureMVC 把 LoginView 视图组件赋给 viewComponent&#xff0c;然后用它来监听用户事件&#xff0c;更新显示状态。 command 将请求&#xff08;例如方法调用&#xff09;封装成一个对象&#xff0c;从而使得用户可以通过该对象来调用相应的操作。 Command&#xff08;命令…

Python实现PageRank算法

目录 第一部分:PageRank算法概述与原理1.1 什么是PageRank算法?1.2 PageRank算法的工作流程1.3 PageRank算法的时间复杂度第二部分:PageRank算法的Python实现(面向对象设计)2.1 Python类设计2.2 代码实现2.3 代码解释第三部分:案例1 - 动态网络中的PageRank计算(观察者模…

重学SpringBoot3-整合 Elasticsearch 8.x (三)使用Repository

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 在使用Spring Data Elasticsearch进行复杂查询时&#xff0c;Repository的接口方法以及定制查询能力可以帮助我们更灵活地构建高级用例。以下是几个具体示例&#xff1a;…

数据结构-并查集专题(2)

一、前言 接&#xff08;1&#xff09;完成剩余题目和了解并查集运用求解最小生成树的Kruskal算法 二、专题训练 2.1 题目总览 前四题见&#xff08;1&#xff09; 2.2 1568: 并查集-家谱 思路 首先这个题目的描述就有问题&#xff0c;它说每一组的父子关系由两行组成&…

吾店云介绍 – 中国人的WordPress独立站和商城系统平台

经过多年在WordPress建站领域的摸索和探索&#xff0c;能轻松创建和管理各种类型网站的平台 – 吾店云建站平台诞生了。 应该说这是一个艰苦卓绝的过程&#xff0c;在中国创建一个能轻松创建和使用WordPress网站的平台并不容易&#xff0c;最主要是网络环境和托管软件的限制。…

测试实项中的偶必现难测bug--<pre>标签问题

问题描述: 用户从网上copy的简介信息可能带有<pre>标签,导致安卓上的内容只能一行滑动展示,但是ios有对这个标签做特殊处理: 分析: <pre> 标签是 HTML 中用于表示预格式化文本的标签,它的作用是保留文本中的空格、换行和缩进。它的全称是 preformatted text…