Nginx 中的負載均衡策略

Nginx 是一個高性能的 HTTP 和反向代理服務器,廣泛用于負載均衡場景。它支持多種負載均衡策略,可以幫助你優化資源利用、提高響應速度和增加系統的可用性。以下是 Nginx 中幾種常見的負載均衡策略及其配置方法:

1. 輪詢(Round Robin)

這是默認的負載均衡策略,Nginx 會依次將請求分發給后端服務器。

http {upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {location / {proxy_pass http://backend;}}
}

在這個例子中,如果沒有指定其他策略,Nginx 將按照輪詢的方式分配請求。

2. 權重(Weight)

你可以為每個服務器設置權重,這樣可以讓某些服務器處理更多的請求。權重越高,該服務器被選中的幾率越大。

http {upstream backend {server backend1.example.com weight=3;server backend2.example.com;server backend3.example.com;}server {location / {proxy_pass http://backend;}}
}

這里 backend1 的權重是 3,意味著它處理的請求數量將是其他兩個服務器的三倍。

3. IP 哈希(IP Hash)

使用 IP 哈希可以確保來自同一個客戶端的所有請求都被發送到相同的服務器上,這對于需要會話保持的應用非常有用。

http {upstream backend {ip_hash;server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {location / {proxy_pass http://backend;}}
}

啟用 ip_hash 后,Nginx 會根據客戶端的 IP 地址計算哈希值,并將其映射到特定的服務器。

4. 最少連接(Least Connections)

此策略會選擇當前連接數最少的服務器來處理請求,適合長連接或長時間運行的任務。

http {upstream backend {least_conn;server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {location / {proxy_pass http://backend;}}
}

在這種情況下,Nginx 會選擇當前活躍連接最少的服務器進行請求轉發。

5. 健康檢查與故障轉移

雖然這不是直接的負載均衡策略,但通過配置健康檢查可以確保只有健康的服務器才會接收請求。如果某個服務器出現故障,Nginx 可以自動將其從服務列表中移除,并在恢復后重新加入。

http {upstream backend {server backend1.example.com max_fails=3 fail_timeout=30s;server backend2.example.com;server backend3.example.com;}server {location / {proxy_pass http://backend;}}
}

在這個例子中,如果 backend1 在 30 秒內連續失敗三次,則會被標記為不可用,并且在接下來的 30 秒內不會接收任何請求。

結合實際應用

選擇哪種負載均衡策略取決于你的具體需求。例如,如果你的應用程序不需要會話保持,那么輪詢或者最少連接可能是不錯的選擇;而如果你的應用依賴于用戶的會話狀態,則可能需要使用 IP 哈希。同時,合理配置權重可以幫助你更好地利用不同性能級別的服務器資源。

Nginx 提供了多種高級負載均衡特性

除了基本的輪詢、權重、IP哈希和最少連接等策略外,還包括一些更復雜的功能來增強系統的靈活性、可靠性和性能。以下是一些值得注意的高級特性:

1. 會話持久性(Session Persistence)

雖然 IP 哈希可以實現簡單的會話持久化,但 Nginx Plus 還支持基于 Cookie 的會話持久化。這允許將用戶請求始終路由到同一臺后端服務器,這對于需要保持會話狀態的應用程序非常重要。

http {upstream backend {sticky cookie srv_id expires=1h domain=.example.com path=/;server backend1.example.com;server backend2.example.com;server backend3.example.com;}
}

2. 健康檢查(Health Checks)

Nginx Plus 支持主動健康檢查,定期探測后端服務器的狀態,并根據結果動態調整負載均衡決策。這意味著如果某臺服務器出現故障,Nginx 可以自動將其從服務池中移除。

http {upstream backend {zone backend 64k;server backend1.example.com:8080 max_fails=3 fail_timeout=30s;server backend2.example.com:8080 max_fails=3 fail_timeout=30s;health_check;}server {location / {proxy_pass http://backend;}}
}

3. 慢啟動(Slow Start)

當一臺服務器從故障中恢復或新加入集群時,直接接受全部流量可能會導致過載。Nginx Plus 支持慢啟動功能,逐漸增加對該服務器的請求量,直到達到正常水平。

upstream backend {zone backend 64k;server backend1.example.com slow_start=30s;server backend2.example.com slow_start=30s;
}

4. 響應時間加權負載均衡

Nginx Plus 可以根據每個服務器的平均響應時間動態調整負載分配,優先選擇響應更快的服務器。

upstream backend {zone backend 64k;least_time header; // 根據響應頭接收完成的時間server backend1.example.com;server backend2.example.com;
}

least_time 支持不同的參數如 last_byte, first_byte, header 等來定義如何計算響應時間。

5. 自定義負載均衡算法

通過使用 Lua 腳本或其他擴展模塊,可以實現自定義的負載均衡邏輯。例如,可以根據特定業務規則(如地理位置、用戶類型等)決定如何分發請求。

6. 緩存

Nginx 可以作為反向代理的同時也充當靜態內容緩存的角色,減少對后端服務器的壓力并加速頁面加載速度。

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;server {location / {proxy_cache my_cache;proxy_pass http://backend;}
}

7. 限流與速率限制

為了防止惡意攻擊或過度使用資源,Nginx 提供了多種限流機制,包括基于 IP 地址、令牌桶算法等方法限制客戶端的請求速率。

limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;server {location /search/ {limit_req zone=one burst=5 nodelay;proxy_pass http://backend;}
}

8. SSL/TLS 終止

Nginx 可以在前端處理所有 SSL/TLS 加密和解密操作,減輕后端服務器的工作負擔,同時還可以提供 HTTP/2 支持等功能。

server {listen 443 ssl http2;ssl_certificate     /etc/nginx/ssl/cert.pem;ssl_certificate_key /etc/nginx/ssl/key.pem;location / {proxy_pass http://backend;}
}

這些高級特性使得 Nginx 成為構建高性能、高可用性的 Web 應用和服務的理想選擇。根據具體需求選擇合適的配置選項,可以幫助你優化系統性能,提高用戶體驗。如果你有特定場景下的問題或需要進一步的幫助,請隨時提問!

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

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

相關文章

用 Python 將分組文本轉為 Excel:以四級詞匯為例的實戰解析

一、背景引入:從“人工整理”到“自動化處理”的轉變 在英語學習過程中,我們經常會接觸各種分組整理的詞匯表,比如“Group1”對應一組單詞及釋義,隨后是“Group2”、“Group3”等等。如果你下載了一個 .txt 格式的四級詞匯表&…

Ffmpeg濾鏡

打開設備 添加濾鏡 循環錄制文件 #include "libavdevice/avdevice.h" #include "libavformat/avformat.h" #include "libavcodec/avcodec.h" #include "libavfilter/avfilter.h" #include "libavfilter/buffersink.h" #incl…

HarmonyOS AI輔助編程工具(CodeGenie)UI生成

UI Generator基于BitFun Platform AI能力平臺,用于快速生成可編譯、可運行的HarmonyOS UI工程,支持基于已有UI布局文件(XML),快速生成對應的HarmonyOS UI代碼,其中包含HarmonyOS基礎工程、頁面布局、組件及…

【第三節】ubuntu server配置遠程連接

首先在ubuntu server中查看ip,打開虛擬機,輸入ip addr show ,這個命令很好記,幾乎就是英文自然語言 下面我們準備遠程連接工具,我選擇的開源的ET,全稱是electerm,圈起來的是必須輸入的內容,輸入完成后點擊保…

CCS-MSPM0G3507-7-模塊篇-MPU6050的基本使用

前言本篇我們接收對MPU6050的基本使用,獲取ID,通過IIC協議獲取寄存器的值,至于高級濾波算法,比如卡爾曼濾波,或者上面的,后面再更新基本配置最好選擇PA0和PA1,5V開漏然后給上代碼MPU6050.c#incl…

spring-ai agent概念

目錄agent 概念理解記憶能力工具計劃agent 概念理解 agent 智能體,突出智能 大模型的感覺 告訴你怎么做(也不一定正確)不會幫你做 Agent的感覺 直接準確的幫你做完(比如,告訴 AI Agent 幫忙下單一份外賣&#xff0c…

NO.4數據結構數組和矩陣|一維數組|二維數組|對稱矩陣|三角矩陣|三對角矩陣|稀疏矩陣

數組的儲存 【定義】 數組: 由 n(≥1) 個相同類型的數據元素構成的有限序列, 是線性表的推廣。 一旦被定義, 維數和長度就不可再改變, 一般對其只有元素的存取和修改操作。 一維數組 Arr[a0,…,an?1] Arr[…

如何把Arduino IDE中ESP32程序bin文件通過樂鑫flsah_download_tool工具軟件下載到ESP32中

目錄前言獲取Arduino IDE中ESP32程序bin文件flsah_download_tool工具軟件下載程序bin文件到ESP32中總結前言 Arduino IDE豐富的驅動庫給ESP32的開發帶來了很多便利,當我們下載程序的時候,直選選擇好ESP32開發板型號和端口號即可下載程序到開發板中&…

2025XYD Summer Camp 7.11 模考

T1TTT 組詢問,每組詢問給定 n,mn,mn,m,求 (nm)?1?∑i1n∑j1mlcm?(i,j) (nm)^{-1}\cdot\sum_{i1}^n\sum_{j1}^m\operatorname{lcm}(i,j) (nm)?1?i1∑n?j1∑m?lcm(i,j) 對 109710^971097 取模。 T≤20000T\le 20000T≤20000,n,m≤107n,m…

uniapp 微信小程序點擊開始倒計時

一、示例 當點擊按鈕時就開始倒計時代碼 <template><view class"sq_box"><button class"button" click"topay">按鈕</button><u-modal v-model"modalShow" :show-cancel-button"true" :content&…

【網絡】Linux 內核優化實戰 - net.netfilter.nf_conntrack_tcp_timeout_established

目錄一、核心概念1. **TCP 連接狀態跟蹤**2. **參數作用**二、默認值與典型場景1. **默認值**2. **典型場景**三、如何調整該參數1. **查看當前值**2. **臨時修改&#xff08;重啟后失效&#xff09;**3. **永久修改**四、相關參數與配合優化1. **其他 TCP 狀態超時參數**2. **…

鴻蒙app 開發中的Record<string,string>的用法和含義

Record<string, string> 在鴻蒙 App 開發中的用法在 TypeScript 中&#xff0c;Record<string, string> 是一個映射類型&#xff08;Mapped Type&#xff09;&#xff0c;用于描述一個對象的結構。在鴻蒙 App 開發中&#xff0c;它常用于定義接口、組件屬性或函數參…

Webpack、Vite配置技巧與CI/CD流程搭建全解析

Webpack、Vite配置技巧與CI/CD流程搭建全解析 在現代前端開發中&#xff0c;構建工具配置和自動化部署流程是提升開發效率和項目質量的關鍵環節。本文將深入探討Webpack和Vite這兩大構建工具的核心配置技巧&#xff0c;并詳細介紹CI/CD流程的搭建方法。 一、Webpack核心配置技巧…

輸入npm install后發生了什么

一、準備階段&#xff1a;配置與環境檢查讀取配置優先級npm install 首先加載多層級的配置&#xff08;優先級從高到低&#xff09;4&#xff1a;項目級 .npmrc用戶級 .npmrc&#xff08;如 ~/.npmrc&#xff09;全局 npmrcnpm 內置默認配置可通過 npm config ls -l 查看所有配…

SpringBoot集成Redis、SpringCache

1 Redis介紹 1.1 Redis作為緩存 由于Redis的存取效率非常高,在開發實踐中,通常會將一些數據從關系型數據庫(例如MySQL)中讀取出來,并寫入到Redis中,后續當需要訪問相關數據時,將優先從Redis中讀取所需的數據,以此,可以提高數據的讀取效率,并且對一定程度的保護關系型…

靜態路由綜合配置實驗報告

一、實驗拓撲二、實驗需求1.除了R5的環回地址固定5.5.5.0/24&#xff0c;其他網段基于192.168.1.0/24進行合理劃分&#xff1b;2.R1-R4每個路由器存在兩個環回接口&#xff0c;模擬PC&#xff0c;地址也在192.168.1.0/24網絡內&#xff1b;3.R1-R4不能直接編寫到達5.5.5.0/24的…

【一起來學AI大模型】PyTorch DataLoader 實戰指南

DataLoader 是 PyTorch 中處理數據的核心組件&#xff0c;它提供了高效的數據加載、批處理和并行處理功能。下面是一個全面的 DataLoader 實戰指南&#xff0c;包含代碼示例和最佳實踐。基礎用法&#xff1a;簡單數據加載import torch from torch.utils.data import Dataset, D…

SpringBoot單元測試類拿不到bean報空指針異常

原代碼package com.atguigu.gulimall.product;import com.aliyun.oss.OSSClient; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; impo…

持續集成 簡介環境搭建

1. 持續集成簡介 1.1 持續集成的作用 隨著互聯網的蓬勃發展,軟件生命周期模型也經歷了幾個比較大的階段,從最初的瀑布模型,到 V 模型,再到現在的敏捷或者 devops,不論哪個階段,項目從立項到交付幾乎都離不開以下幾個過程,開發、構建、測試和發布,而且一直都在致力于又…