1.为什么需要连接数限流?

  • 数据库/Redis/MQ 连接耗资源:恶意脚本或误配可能瞬间占满连接池,拖垮后端。
  • 防御慢速攻击:层叠式限速(连接数+带宽)可阻挡「Slow Loris」之类的 TCP 低速洪水。
  • 公平接入:多租户环境里,防止单一租户独占所有连接。]

2.核心指令速览

指令作用关键点
limit_conn_zone定义共享内存 zone 保存「<键, 连接计数>」必须位于 stream {} 顶层
limit_conn指定 zone 和最大连接数支持多次声明,取最严格
limit_conn_dry_run on演练模式:只计数不拒绝用于灰度调整
limit_conn_log_level warn调整拒绝连接时日志级别默认为 error
$limit_conn_status日志变量,取值 PASSED/REJECTED/REJECTED_DRY_RUN便于监控与告警

3.最小可运行示例:单 IP 只允 2 条 MySQL 链路

stream {# 1) 为客户端二进制 IP 分配 10 MB 共享区limit_conn_zone $binary_remote_addr zone=per_ip:10m;server {listen 3306;proxy_pass mysql_backend;# 2) 每个 IP 最多 2 连接limit_conn per_ip 2;# 3) 日志里输出限流状态access_log /var/log/nginx/mysql.log'$remote_addr $limit_conn_status';}
}
  • 10 MB zone ≈ 32 × 32 k ≈ 32 k IPv4 状态,足够中型集群使用。
  • ipv6only=on$binary_remote_addr 自动 16 字节;一条状态占 64 B。

4.进阶玩法

4.1 基于租户 Token 限流

js_import token.js;# 解析 TCP 握手包,自定义 $tenant_id 变量
js_preread token.parse;
limit_conn_zone $tenant_id zone=tenant:20m;server {...limit_conn tenant 50;   # 每租户 50 并发
}
  • token.parse 在前置报文里提取租户字段并写入 s.variables.tenant_id
  • 空值不会计入 zone,可为「非租户链路」单独配置默认限额。

4.2 Dry-run 灰度

server {...limit_conn_zone $binary_remote_addr zone=ip:5m;limit_conn ip 4;limit_conn_dry_run on;          # 先观察limit_conn_log_level notice;    # 日志级别调低
}
  • 查看一段时间的 REJECTED_DRY_RUN 统计,确认阈值合理后再关闭 dry-run 正式启用。

4.3 与 limit_req/proxy_timeout 叠加

  • 连接数 控 «并发」,
  • 限速/超时 控 «速率+时长»,
    组合可实现针对 “慢速但大量连接” 的复合防护。

5.监控与可视化(Plus 版)

Nginx Plus R21+ 支持通过 API 读取/清空 zone 数据:

# 查询 zone 使用率
curl http://127.0.0.1:8080/api/8/stream/limit_conns
# 清空计数
curl -X DELETE http://127.0.0.1:8080/api/8/stream/limit_conns/per_ip

连同 $limit_conn_status 配置在 Prometheus/Loki,可即时获知被拒绝比例。

6.常见坑与调优

症状原因解决办法
大并发下偶发 503zone 容量耗尽增大 :size 或优化 key 维度
IPv6 客户端被限得更多相同主机多地址把 key 换成 $remote_addr(文本)并写自定义哈希
限流后 CPU 飙升拒绝即 close() 导致重连风暴配合 geo/防火墙先行黑洞异常客户端
Dry-run 日志太多默认 error 级别降至 info 或单独写 debug 采样

7.总结

  • 简单可靠:仅两条指令即可实现四层连接数限流,无需外部依赖。
  • 弹性演练:Dry-run 帮助在生产灰度检验阈值,保障业务平稳切换。
  • 可组合:与 keyvaljs_module、防火墙规则共同构建分层流量防护网。
  • 商业增强:Nginx Plus 提供 API 观测与动态清理,让运维自动化进一步提效。

掌握 ngx_stream_limit_conn_module,让你的 Nginx Stream 网关在面向高并发 TCP/UDP 服务时,既 能扛够稳

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/84246.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/84246.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/84246.shtml

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

相关文章

LLMs之Structured Output:vLLM 结构化输出指南—从约束生成到自动解析与高效实现

LLMs之Structured Output&#xff1a;vLLM 结构化输出指南—从约束生成到自动解析与高效实现 导读&#xff1a;随着大语言模型&#xff08;LLM&#xff09;在各类任务中的广泛应用&#xff0c;如何使其输出具备可控性、结构化与可解析性&#xff0c;成为实际部署中的关键问题。…

32 C 语言字符处理函数详解:isalnum、isalpha、iscntrl、isprint、isgraph、ispunct、isspace

1 isalnum() 函数 1.1 函数原型 #include <ctype.h>int isalnum(int c); 1.2 功能说明 isalnum() 函数用于检查传入的整数参数是否为 ASCII 编码的字母或数字字符&#xff08;A - Z、a - z、0 - 9&#xff0c;对应 ASCII 值 65 - 90、97 - 122、48 - 57&#xff09;。…

在网络排错中,经常会用到的操作命令和其作用

在网络排错中&#xff0c;经常会用到的操作命令和其作用 网络排错是确保网络连接正常运行的重要环节&#xff0c;通过使用一系列工具和命令&#xff0c;可以有效诊断和解决网络问题。以下是常用的网络排错命令及其作用&#xff1a; 1.ping ping 是一个用于测试主机之间连通性…

C++中友元(friend)高级应用和使用示例

下面列出几个 高级友元应用场景 与典型设计模式&#xff0c;并配以示例&#xff0c;帮助大家在实际项目中灵活运用 friend 机制。 1. ADL 友元注入&#xff08;“注入式友元”&#xff09; 场景&#xff1a;为某个类型定义非成员操作符&#xff08;如算术、流插入等&#xff0…

TCP相关问题 第一篇

TCP相关问题1 1.TCP主动断开连接方为什么需要等待2MSL 如上图所示:在被动链接方调用close&#xff0c;发送FIN时进入LAST_ACK状态&#xff0c;但未收到主动连接方的ack确认&#xff0c;需要被动连接方重新发送一个FIN&#xff0c;而为什么是2MSL&#xff0c;一般认为丢失ack在…

STM32启动文件学习(startup_stm32f40xx.s)

原代码 ;******************** (C) COPYRIGHT 2016 STMicroelectronics ******************** ;* File Name : startup_stm32f40xx.s ;* Author : MCD Application Team ;* version : V1.8.0 ;* date : 09-November-2016 ;* Desc…

uni-app学习笔记二十三--交互反馈showToast用法

showToast部分文档位于uniapp官网-->API-->界面&#xff1a;uni.showToast(OBJECT) | uni-app官网 uni.showToast(OBJECT) 用于显示消息提示框 OBJECT参数说明 参数类型必填说明平台差异说明titleString是提示的内容&#xff0c;长度与 icon 取值有关。iconString否图…

【Ragflow】26.RagflowPlus(v0.4.0):完善解析逻辑/文档撰写模式全新升级

概述 在历经半个月的间歇性开发后&#xff0c;RagflowPlus再次迎来一轮升级&#xff0c;正式发布v0.4.0。 开源地址&#xff1a;https://github.com/zstar1003/ragflow-plus 更新方法 下载仓库最新代码&#xff1a; git clone https://github.com/zstar1003/ragflow-plus.…

【论文解读】Toolformer: 语言模型自学使用工具

1st author: ‪Timo Schick‬ - ‪Google Scholar‬ paper: Toolformer: Language Models Can Teach Themselves to Use Tools | OpenReview NeurIPS 2023 oral code: lucidrains/toolformer-pytorch: Implementation of Toolformer, Language Models That Can Use Tools, by…

Spring 官方推荐构造函数注入

1. 依赖关系明确 构造函数注入可以清晰地声明类的依赖关系&#xff0c;所有必需的依赖项都通过构造函数参数传递&#xff0c;使得代码的可读性更高。这种方式让类的使用者能够直观地了解类的依赖&#xff0c;而不需要通过注解或反射来猜测。 2. 增强代码健壮性 构造函数注入…

[深度学习]搭建开发平台及Tensor基础

一、实验目的 1. 掌握Windows下PyTorch 深度学习环境的配置 2. 掌握一种PyTorch开发工具 3. 理解张量并掌握Tensor的常用操作&#xff08;创建、调整形状、加、减、乘、除、取绝对值、比较操作、数理统计操作 4. 掌握Tensor与Numpy的互相转换操作 5. 掌握Tensor 的降维和…

【Zephyr 系列 14】使用 MCUboot 实现 BLE OTA 升级机制:构建安全可靠的固件分发系统

🧠关键词:Zephyr、MCUboot、OTA 升级、BLE DFU、双分区、Bootloader、安全固件管理 📌面向读者:希望基于 Zephyr 为 BLE 设备加入安全 OTA 升级功能的开发者 📊预计字数:5200+ 字 🧭 前言:为什么你需要 OTA? 随着设备部署数量增多与产品生命周期延长,远程升级(…

App Search 和 Workplace Search 独立产品现已弃用

作者&#xff1a;来自 Elastic The Search Product Team App Search 和 Workplace Search 的核心功能已集成到 Elasticsearch 和 Kibana 中。 我们宣布在 9.0 版本中弃用 App Search 和 Workplace Search。 如果你是 Elastic 的客户&#xff0c;当前正在使用 App Search 和 Wo…

Spring Boot + OpenAI 构建基于RAG的智能问答系统

一、技术架构设计 1.1 系统架构图 [前端]│▼ (HTTP/REST) [Spring Boot Controller]│▼ (Service Call) [问答处理服务层]├─▶ [知识库检索模块] ──▶ [向量数据库]└─▶ [OpenAI集成模块] ──▶ [OpenAI API]│▼ [结果组装与返回] 1.2 技术选型 组件技术栈版本要求…

Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)

13.2. Oracle for Linux物理DG环境搭建 Oracle 数据库的DataGuard技术方案,业界也称为DG,其在数据库高可用、容灾及负载分离等方面,都有着非常广泛的应用,对此,前面相关章节已做过较为详尽的讲解,此处不再赘述。 需要说明的是, DG方案又分为物理DG和逻辑DG,两者的搭建…

【论文阅读29】区间预测CIPM(2025)

这篇论文主要研究的是滑坡位移的区间预测方法&#xff0c;提出了一种新型的预测模型&#xff0c;叫做复合区间预测模型&#xff08;CIPM&#xff09;&#xff0c;并以三峡库区的白家堡滑坡为案例进行了应用和验证。论文的核心内容和贡献包括&#xff1a; 背景与问题 滑坡位移预…

Linux 文件系统底层原理笔记:磁盘结构、ext2 文件系统与软硬链接解析

文章目录 一、理解硬件1.1 磁盘、服务器、机柜、机房1.2 磁盘物理结构1.3 磁盘的存储结构1.4 磁盘的逻辑结构1.4.1 理解过程1.4.2 真实过程 1.5 CHS && LBA地址 二、引入文件系统2.1 引入"块"概念2.2 引入"分区"概念2.3 引入"inode"概念…

75Qt窗口_Qt窗口概览

Qt 窗⼝ 是通过 QMainWindow类 来实现的。 QMainWindow 是⼀个为⽤⼾提供主窗⼝程序的类&#xff0c;继承⾃ QWidget 类&#xff0c;并且提供了⼀个预定义的布局。 QMainWindow 包含 ⼀个菜单栏&#xff08;menu bar&#xff09;、多个⼯具栏(tool bars)、多个浮动窗⼝&#x…

Appium+python自动化(九)- 定位元素工具

简介 环境搭建好了&#xff0c;其他方面的知识也准备的差不多了&#xff0c;那么就开始下一步元素定位&#xff0c;元素定位主要介绍如何使用uiautomatorviewer&#xff0c;通过定位到页面上的元素&#xff0c;然后进行相应的点击等操作. 此外在介绍另一款工具&#xff1a;Insp…

apipost将token设置为环境变量

右上角 可以新增或者是修改当前的环境 环境变量增加一个token,云端值和本地值可以不用写 在返回token的接口里设置后执行操作&#xff0c;通常是登录的接口 右侧也有方法提示 //设置环境变量 apt.environment.set("token", response.json.data.token); 在需要传t…