Nginx Stream 層連接數限流實戰ngx_stream_limit_conn_module

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…