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

Nginx限流实践-limit_req和limit_conn的使用说明

注意: 本文内容于 2024-12-07 19:38:40 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:Nginx限流实践。感谢您的关注与支持!

一、限流

之前我有记录通过CentOS7定时任务实现的Nginx限流功能。这算是通过Nginx进行限流的一种思路。

还有另外一种思路,是通过Nginx内置的两个模块来实现。

  • limit_req: 用于限制每秒的请求次数。该模块基于令牌桶(Token Bucket)算法,每个请求在处理前必须从令牌桶中获取一个令牌,如果没有令牌可用,则请求被延迟或拒绝。
  • limit_conn: 用于限制同时连接数。该模块控制每个特定键(如IP地址或用户)允许的最大并发连接数。

1.1 limit_req

若需要查看详细内容,自行查阅Module ngx_http_limit_req_module

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;定义一个10MB的内存区域,命名为one,用来存储客户端IP地址的调用数,限制每个客户端每秒只能调用1次。注意nginx是以毫秒为单位的。当配置了2r/s时,平均下来就是每500ms内,只允许成功1个请求。

limit_req zone=one burst=5 nodelay;使用one空间,限制同一个键调用时,支持5个突发请求,并且配置nodelay表示立即响应。

limit_req可以配置在http、server、location内。

若未配置nodelay,则表示进行延迟处理,当超过请求速率rate时,多余的请求会进入突发队列(长度由 burst 决定)。Nginx 会根据配置的rate,以固定时间间隔从队列中取出请求进行处理。例如:

  • rate=1r/s 意味着每 1000ms 处理一个请求。
  • 如果一个客户端在 1 秒内发送了 6 个请求:
    • 前 1 个请求按速率直接处理。
    • 剩下的 5 个请求将进入突发队列并被延迟。
    • 每隔 1000ms,处理队列中的一个请求,持续 5000ms。

当未配置nodelay时,持续 5000ms 会间接影响到后续的在rate内请求的响应速率。

配置示例

worker_processes 2;
error_log logs/error.log;
events {worker_connections 4096;
}http {include mime.types;default_type application/octet-stream;log_format main'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log logs/access.log main;sendfile on;limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;limit_req_status 429;server {listen 80;location / {limit_req zone=one burst=5 nodelay;root html;}}
}

以上示例,在高并发调用时,实际情况前6次立马成功,后续每隔1秒成功1个请求,其他请求均返回429状态码。该结果可以使用JMeter来进行验证。

1.2 limit_conn

若需要查看详细内容,自行查阅Module ngx_http_limit_conn_module

limit_conn_zone $binary_remote_addr zone=two:10m;定义一个10MB的内存区域,命名为two,用来存储客户端IP地址的连接数。

limit_conn two 1;使用two空间,限制同一个键,同时刻最多只有1个连接。

准备一个10秒才会响应的后端服务http://10.0.0.1:4321

示例配置

worker_processes 2;
error_log logs/error.log;
events {worker_connections 4096;
}http {include mime.types;default_type application/octet-stream;log_format main'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log logs/access.log main;sendfile on;limit_conn_zone $binary_remote_addr zone=two:10m;limit_conn_status 409;server {listen 80;location / {limit_conn two 1;proxy_pass http://10.0.0.1:4321;}}
}

以上示例,在1000个请求连接时,只有1个连接成功,其他请求均返回409状态码。该结果可以使用JMeter来进行验证。

二、参考

Module ngx_http_limit_req_module

Module ngx_http_limit_conn_module

Nginx限流功能优化:让流量控制变得轻松简单

相关文章:

Nginx限流实践-limit_req和limit_conn的使用说明

注意: 本文内容于 2024-12-07 19:38:40 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:Nginx限流实践。感谢您的关注与支持! 一、限流 之前我有记录通过CentOS7定时任务实…...

Unity在运行状态下,当物体Mesh网格发生变化时,如何让MeshCollider碰撞体也随之实时同步变化?

旧版源代码地址:https://download.csdn.net/download/qq_41603955/90087225?spm1001.2014.3001.5501 旧版效果展示: 新版加上MeshCollider后的效果: 注意:在Unity中,当你动态地更改物体的Mesh时,通常期望…...

记一次由docker容器使得服务器cpu占满密码和密钥无法访问bug

Bug场景: 前几天在服务器上部署了一个免费影视网站,这个应用需要四个容器,同时之前的建站软件workpress也是使用docker部署的,也使用了三个容器。在使用workpress之前,我将影视软件的容器全部停止。 再使用workpress…...

前端TS基础

文章目录 一、类型1、定义类型2、any、unknown、never3、基础类型4、联合类型5、交叉类型6、type、typeof7、作用域 二、数据结构1、数组2、元组3、函数类型4、对象类型 三、接口四、泛型五、enum六、断言七、工具1、模块2、namespace3、装饰器4、declare5、运算符6、映射类型7…...

前端面经每日一题day06

Cookie有什么字段 Name:cookie的唯一标识符 Value:与Name对应,存储Cookie的信息 Domain:可以访问cookie的域名 Path:可以访问cookie的路径 Expires/Max-Age:超时时间 Size:cookie大小 Ht…...

SOC,SOH含义区别及计算公式

SOC,SOH含义区别及计算公式 两者结合使用,有助于实现更精确的电池管理,延长电池的使用寿命,并确保电池的高效、安全运行。 1. SOC(State of Charge,荷电状态)2. SOH(State of Health…...

阿里云轻量应用服务器开放端口,图文教程分享

阿里云轻量应用服务器如何开放端口?在轻量服务器管理控制台的防火墙中添加规则即可开通端口,开通80端口就填80,开通443就填443端口,开通3306端口就填3306。阿里云百科网aliyunbaike.com整理阿里云轻量应用服务器端口号开通图文教程…...

嵌入式里的“移植”概念

这里因为最近一年看到公司某项目很多代码上有直接硬件的操作,这里有感而发,介绍移植的概念。 一、硬件 先上一个图: 举个例子,大学里应该都买过开发板,例如st的,这里三个层次, 内核&#xff…...

深入探讨 AF_PACKET 套接字

AF_PACKET 套接字是一种用于直接访问网络接口(即网卡)的套接字类型,通常用于网络数据包捕获和分析。它允许应用程序直接与网络接口卡(NIC)交互,而不需要通过网络协议栈。从而可以发送和接收以太网帧。它提供了比普通TCP/UDP套接字…...

Redis的哨兵机制

目录 1. 文章前言2. 基本概念2.1 主从复制的问题2.2 人工恢复主节点故障2.3 哨兵机制自动恢复主节点故障 3. 安装部署哨兵(基于docker)3.1 安装docker3.2 编排redis主从节点3.3 编排redis-sentinel节点 4. 重新选举5. 选举原理6. 总结 1. 文章前言 &…...

CSS系列(1)-- 选择器体系详解

前端技术探索系列:CSS 选择器体系详解 🎯 致读者:探索 CSS 选择器的奥秘 👋 前端开发者们, 今天我们将深入探讨 CSS 选择器体系,这是构建优雅样式表的基础。让我们一起学习如何精确地选中并控制网页中的…...

用Python开发打字速度测试小游戏

本文将带你一步步开发一个简单的打字速度测试小游戏,通过随机生成词组并计算用户输入速度,帮助提升打字技能。 一、功能描述 随机生成一段句子,用户需要尽快输入。计时功能,统计用户输入的总时长。对比正确率和速度,给出评分反馈。二、开发环境 语言:Python依赖库:pygam…...

基于gitlab API刷新MR的commit的指定status

场景介绍 自己部署的gitlab Jenkins,并已经设置好联动(如何设置可以在网上很容易搜到)每个MergeRequest都可以触发多个Jenkins pipeline,pipeline结束后会将状态更新到gitlab这个MR上希望可以跳过pipeline运行,直接将指定的MR的指定pipeline状态刷新为…...

服务器数据恢复—LINUX下各文件系统删除/格式化的数据恢复可行性分析

Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs&#xff0…...

Spark on Yarn安装配置,大数据技能竞赛(容器环境)

Spark on Yarn模式,即把Spark作为一个客户端,将作业提交给Yarn服务,由于在生产环境中,很多时候都要与Hadoop使用同一个集群,因此采用Yarn来管理资源调度,可以有效提高资源利用率。 环境说明: 服…...

遣其欲,而心自静 -- 33DAI

显然,死做枚举只能的50分。 错了4次总算对了。 大体思路: 因题目说只有两个因数,那么有两种情况: 1:两个质数相乘,如:3*515 5*745 等(不包括5*525 或5*315 重复计算\ 因为3*5算了…...

No.25 笔记 | 信息收集与Google语法的实践应用

什么是信息收集? 信息收集(Information Gathering)是渗透测试的第一步,其目的是通过各种手段收集目标的漏洞和弱点,为后续的攻击策略提供依据。 正所谓“知己知彼,百战百胜”,信息收集的重要性…...

GitLab基础环境部署:Ubuntu 22.04.5系统在线安装GitLab 17.5.2实操手册

文章目录 GitLab基础环境部署:Ubuntu 22.04.5系统在线安装GitLab 17.5.2实操手册一、环境准备1.1 机器规划1.2 环境配置1.2.1 设置主机名1.2.2 停止和禁用防火墙1.2.3 更新系统 二、GitLab安装配置2.1 安装GitLab所需的依赖包2.2 添加GitLab存储库2.2.1 将GitLab存储…...

SpringBoot3配置文件

一、统一配置管理概述: SpringBoot工程下,进行统一的配置管理,你想设置的任何参数(端口号、项目根路径、数据库连接信息等等)都集中到一个固定位置和命名的配置文件(application.properties或application.yml)中 配置文件应该放置在Spring Boot工程的s…...

【机器学习】任务十二:循环神经网络

1.循环神经网络 1.1 什么是循环神经网络(RNN)? 循环神经网络(Recurrent Neural Network, RNN) 是一种用于处理序列数据的神经网络类型,它的主要特点是拥有循环连接,使得网络可以对序列中的每个…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...