NGINX 四層上游模塊`ngx_stream_upstream_module` 實戰指南

一、模塊定位與引入

  • 模塊名稱ngx_stream_upstream_module

  • 首次引入:NGINX 1.9.0(2015-08-04)

  • 編譯選項:啟用 --with-stream(含此模塊)

  • 作用

    1. 定義后端服務器組(upstream 塊)
    2. 配置各服務器參數(權重、失敗判斷、DNS 動態解析等)
    3. 通過多種算法分配客戶端連接
    4. 支持商業版的動態可配置與健康檢查

二、核心指令與參數

1. 定義上游組

upstream <name> {[負載均衡算法指令]server <address> [參數];[更多 server ...][zone <zone_name> <size>;][state /path/to/state.file;]
}
  • upstream name { … }:聲明一個后端組,供 proxy_pass 引用。
  • zone name size(1.9.0 商業版可動態):在共享內存中保存配置與運行狀態,用于多 worker 共享與熱更新。
  • state file(1.9.7 商業版可用):外部持久化服務器列表與參數,Nginx 重載或升級可保留狀態。

2. 定義后端服務器

server <domain|IP:port>|unix:/path [參數];

常用參數:

參數含義
weight=n權重,默認 1,輪詢時按比例分配
max_conns=n最大并發連接數(1.11.5)
max_fails=nfail_timeout 時間內允許的失敗次數,超過則標記為不可用
fail_timeout=time標記失敗及恢復時間,默認 10s
backup備份服務器,只有主服務器都不可用時才會被調用
down永久禁用該服務器
resolve開啟動態 DNS 解析,需配合 resolver
service=name基于 DNS SRV 記錄解析(1.9.13)
商業版slow_start、健康檢查 (health_check)、動態修改、API 控制

3. 負載均衡算法

upstream 塊中,可任選一種或多種算法指令;若不指定,默認為加權輪詢。

  • hash <key> [consistent](1.11.2)
    基于 <key> 的哈希值分配,consistent 開啟一致性哈希,減少因節點變動導致的重映射。

  • least_conn
    將連接分配給活動連接數最少的服務器,多個最少則按權重輪詢。

  • least_time <connect|first_byte|last_byte> [inflight](商業版)
    按平均響應時間(建立連接/首字節/全量)和活動連接數綜合考量。

  • random [two [method]](1.15.1)
    隨機挑選服務器,two 參數從兩臺中再按 least_conn 等方法選出最佳。

4. DNS 解析支持

resolver 10.0.0.1 [valid=30s] [ipv4=off|ipv6=off] [status_zone=zone];
resolver_timeout 5s;
  • resolve:配合 server ... resolve,自動在后臺定期刷新域名 IP 列表。
  • service=name:支持 SRV 記錄,自動按優先級與權重構建主/備服務器。
  • resolver_timeout(1.27.3):解析超時時間。

三、最小可運行示例

stream {resolver 127.0.0.1 valid=10s;upstream backend {zone backend_zone 64k;hash $remote_addr consistent;server backend1.example.com:12345 weight=5 resolve;server backend2.example.com:12345 resolve;server unix:/tmp/backend3;server backup1.example.com:12345 backup;}server {listen 12346;# 輪詢之外:也可在此加 health_check;proxy_pass backend;}
}
  • 說明

    1. 使用一致性哈希,讓相同客戶端 IP 總落到同一臺后端;
    2. resolve 動態更新 DNS,結合 zone 共享配置;
    3. backup 只在所有主服務器均失效時才啟用。

四、嵌入式變量

ngx_stream_upstream_module1.11.4 起提供監控與日志埋點變量:

變量含義
$upstream_addr實際連接的后端地址列表,多個用逗號分隔
$upstream_bytes_received從后端接收的字節數,多個連接用逗號分隔
$upstream_bytes_sent向后端發送的字節數
$upstream_connect_time建立連接耗時(秒,毫秒精度)
$upstream_first_byte_time等待首字節耗時
$upstream_session_time整個會話持續時間

可在 access_logmapif 等指令中靈活引用,監控后端性能與故障。

五、實戰優化與注意事項

  1. 共享 zone 大小zone name 64k 一般可容納數百條服務器配置。
  2. DNS TTL 與 validresolver valid 覆蓋 DNS TTL,推薦設置為 5–30 秒。
  3. 一致性哈希:節點增刪需配合 consistent,否則大規模重映射影響緩存或會話。
  4. 備份與故障切換backup 參數只在主節點全掛時生效;可配合 max_failsfail_timeout 精細調整。
  5. 商業版特性:如需在線健康檢查、慢啟動、API 動態修改,請評估 NGINX Plus 或商業訂閱。

六、總結

ngx_stream_upstream_module 是構建高可用、高性能 TCP/UDP 代理的核心模塊。通過靈活的服務器組定義、多樣的負載均衡算法、動態 DNS 支持與豐富的監控變量,它能夠滿足從簡單輪詢到金融級一致性哈希、從靜態配置到動態熱更新的全方位需求。升級至 NGINX ≥1.9.0,結合商業版特性,更能在不間斷部署與流量管控上發揮巨大價值。

立即部署:根據業務特點選擇合適的負載均衡策略與參數,讓您的四層流量穩定、高效、可觀測!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85058.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85058.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85058.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WinUI3入門2:DataGrid動態更新 添加刪除和修改字段

初級代碼游戲的專欄介紹與文章目錄-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。 這些代碼大部分以Linux為目標但部分代碼是純C的&#xff0c;可以在任何平臺上使用。 源碼指引&#xff1a;github源…

基于Python學習《Head First設計模式》第十三章 現實世界中的模式

定義設計模式 設計模式要素 模式名稱、分類意圖&#xff1a;描述模式是什么動機&#xff1a;描述什么時候使用這個模式&#xff0c;具體場景適用性&#xff1a;描述什么地方使用這個模式&#xff0c;用在什么場合結構&#xff1a;類圖參與者&#xff1a;類和對象的責任和角色…

線性代數(1)線性方程組的多種解法

求解線性方程組是線性代數的核心問題之一&#xff0c;根據方程組的類型&#xff08;如齊次/非齊次、方陣/非方陣、稀疏/稠密等&#xff09;&#xff0c;可以采用不同的解法。以下是常見的線性方程組解法分類及簡要說明&#xff1a; 一、直接解法&#xff08;精確解&#xff09…

肝臟/肝臟腫瘤圖像分割數據集(貓臉碼客第261期)

探秘肝臟/肝臟腫瘤圖像分割&#xff1a;醫學影像技術的新突破 一、引言 肝臟/肝臟腫瘤圖像分割在醫學領域占據著愈發重要的地位&#xff0c;為肝臟疾病的精準診斷與有效治療提供了關鍵技術支撐。隨著醫學成像技術的飛速進步&#xff0c;如磁共振成像&#xff08;MRI&#xff…

【LLM05---位置編碼】

文章目錄 位置編碼引出Transformer中位置編碼方法:Sinusoidal functions兩個重要性質位置編碼 最近在學習位置編碼,想找一個講的比較透徹的文章或視頻,找了半天,滿意的一個也沒有,所以自己記錄一下。 注意,本篇筆記只作為自己的學習記錄用,更好的講解的內容請看鏈接:位…

pikachu——ssrf

概念補充&#xff1a; 內網&#xff1a;局部范圍內的私有網絡&#xff0c;比如局域網就是一個小范圍的內網&#xff0c;有私有IP&#xff0c;并且內網受防火墻的保護&#xff0c;外網無法直接訪問 外網&#xff1a;全球范圍的公共網絡&#xff0c;公有ip ip地址&#xff1a;…

java 設計模式_行為型_13備忘錄模式

13.備忘錄模式 模式定義 備忘錄模式&#xff08;Memento Pattern&#xff09;模式的定義&#xff1a;在不破壞封裝性的前提下&#xff0c;捕獲一個對象的內部狀態&#xff0c;并在該對象之外保存這個狀態&#xff0c;以便以后當需要時能將該對象恢復到原先保存的狀態。該模式又…

創建postgres數據庫失敗

異常&#xff1a; postgres# CREATE DATABASE deepflow_agent2; ERROR: source database "template1" is being accessed by other users DETAIL: There are 2 other sessions using the database 如何斷聯這兩個session 要解決 PostgreSQL 中因 template1 數據庫…

臥安機器人闖上市:深耕AI具身技術,“大疆教父”李澤湘再落子

撰稿|行星 來源|貝多財經 又一家機器人企業&#xff0c;現身港股資本市場。貝多財經了解到&#xff0c;臥安機器人&#xff08;深圳&#xff09;股份有限公司&#xff08;下稱“臥安機器人”&#xff09;于6月8日向港交所提交了上市申請&#xff0c;國泰君安國際、華泰國際為…

基于GNU Radio Companion搭建的AM信號實驗

目錄 實驗目的和要求 1、AM收發系統仿真和實際接收 調制過程 2、Lab 2.1實驗過程AM信號的產生 AM信號的表達式 調制深度的概念 3、Lab2.2 AM信號的解調 4、Lab2.3 實際用RTLSDR接收一個ISM(912MHz)頻率的AM信號,信號的AM調制為音頻為48KHz的音樂信號 實驗目的和要求 …

【go】(僅思路)使用go實現一款簡單的關系型數據庫gosql

文章目錄 背景給navicate回復版本號建立連接數據庫list新建數據庫刪除數據庫刪除表查詢表數據總結roadmapnavicate連接適配 背景 使用go很容易編譯出一個二進制文件&#xff0c;已經有人用純go實現了sqlite3的驅動&#xff08;go get github.com/glebarez/sqlite&#xff09;&…

echarts開發 | 數據可視化 -- 第二篇 echart進階配置項學習

文章目錄 一、數據標記(markLine、markPoint)1.1 markLine&#xff08;標記線&#xff09;1.2 markPoint&#xff08;標記點&#xff09; 一、數據標記(markLine、markPoint) 支持兩類標記方式 markLine 和 markPoint 分別用于標示趨勢線和特定數據點&#xff0c;以加強數據表…

Kafka數據寫入流程源碼深度剖析(Broker篇)

在Kafka數據寫入流程中&#xff0c;Broker端負責接收客戶端發送的消息&#xff0c;并將其持久化存儲&#xff0c;是整個流程的關鍵環節。本文將深入Kafka Broker的源碼&#xff0c;詳細解析消息接收、處理和存儲的具體實現。 一、網絡請求接收與解析 Broker通過Processor線程…

名稱 深度學習(監督學習) Iteration 一次 mini-batch 前向+反向傳播更新 Epoch 所有數據集訓練一遍。這兩個概念不一樣嗎?

你的問題非常專業&#xff0c;確實容易混淆&#xff0c;下面我用科研術語 通俗比喻來清晰地區分&#xff1a; ? 簡明對照表&#xff1a;Iteration vs. Epoch&#xff08;在監督學習中&#xff09; 名稱專業術語解釋通俗理解是否屬于監督學習&#xff08;深度學習&#xff09…

Blender 模型下載

1.CGModel網站 https://www.cgmodel.com/ 免費模型數量多&#xff0c;國風類題材的模型多&#xff0c;中文搜索方便 2.Blender官網 3.3d溜溜網 https://3d.3d66.com/ 4.free3d.com free3d.com

Spring涉及的設計模式以及實際使用場景(含代碼)

Spring涉及的設計模式以及實際使用場景(含代碼) 1.工廠模式&#xff08;Factory Pattern&#xff09; 作用: 隱藏對象創建的細節&#xff0c;通過工廠類統一管理對象的實例化。 場景&#xff1a;Spring的BeanFactory和ApplicationContext是工廠模式的典型實現。 // 通過App…

ROM 只讀存儲器 隨機存取

ROM&#xff08;Read-Only Memory&#xff0c;只讀存儲器&#xff09;的存取方式為&#xff1a; ? 隨機存取方式&#xff08;Random Access&#xff09; 盡管“ROM”強調的是“只讀”&#xff0c;它的數據訪問方式與 RAM 類似&#xff0c;都是隨機存取。 &#x1f50d; 解釋如…

opensuse解決微信無法登錄的問題

思路啟發 https://forum.suse.org.cn/t/topic/17183/2 實際解決 https://forum.suse.org.cn/t/topic/17204/5 解決方法 先安裝 sudo zypper install execstackcd /opt/wechatsudo bash -c execstack -c ./*.so

Adixen ASM380 氦氣檢漏儀 阿爾卡特Mobile high performance helium leak detector

Adixen ASM380 氦氣檢漏儀 阿爾卡特Mobile high performance helium leak detector

堆的自動管理

由于程序員必須編寫出到分配和釋放存儲器的明確的調用&#xff0c;所以用m a l l o c和f r e e完成指針的動態分配和重新分配是管理堆的手工( m a n u a l )方法。相反地&#xff0c;運行時棧則是由調用序列自動地( a u t o m a t i c a l l y )管理。在一種需要完全動態的運行…