Nginx 負載均衡、高可用及動靜分離

Nginx 負載均衡、高可用及動靜分離深度實踐與原理剖析

在互聯網應用架構不斷演進的今天,如何高效地處理大量用戶請求、保障服務的穩定性與性能,成為開發者和運維人員面臨的關鍵挑戰。Nginx 作為一款高性能的 Web 服務器和反向代理服務器,憑借其出色的負載均衡、高可用性以及動靜分離能力,在眾多項目中發揮著核心作用。本文將深入探討 Nginx 在負載均衡、高可用性保障以及動靜分離方面的配置與實踐,并剖析其背后的原理。

Nginx 負載均衡:流量分發的智慧

安裝與基礎配置

在 CentOS 系統上,安裝 Nginx 的過程十分簡潔。通過dnf包管理器,僅需執行以下命令即可完成安裝、啟動及開機自啟配置:

sudo dnf update -y  # 更新系統包索引sudo dnf install nginx -y # 安裝Nginxsudo systemctl start nginx  # 啟Nginx服務sudo systemctl enable nginx # 設置 Nginx 開機自啟動

安裝完成后,Nginx 便已在服務器上就緒,等待進一步的配置與使用。

負載均衡算法配置

Nginx 提供了多種負載均衡算法,常見的有輪詢(Round Robin)和 IP 哈希(IP Hash)。輪詢算法按照順序依次將請求分發到后端服務器,適用于后端服務器性能相近的場景;而 IP 哈希算法則根據客戶端的 IP 地址進行哈希計算,將相同 IP 的請求始終分發到同一臺后端服務器,有助于實現會話保持。

以 IP 哈希算法為例,在 Nginx 的主配置文件/etc/nginx/nginx.conf中,通過upstream塊定義后端服務器集群:

http { upstream web\_servers {\# IP 哈希算法ip\_hash;server 192.168.1.300:80 weight=1;server 192.168.1.301:80 weight=1;}}

上述配置中,ip_hash指令啟用 IP 哈希算法,server指令定義了兩臺后端 Web 服務器,weight參數用于設置服務器的權重,權重越高,分配到的請求數量相對越多。

服務器代理配置

為了將客戶端請求轉發到后端服務器集群,需要在server塊中配置代理規則:

server {listen 80;server\_name localhost;location / {proxy\_pass http://web\_servers;proxy\_set\_header Host \$host;proxy\_set\_header X-Real-IP \$remote\_addr;proxy\_set\_header X-Forwarded-For \$proxy\_add\_x\_forwarded\_for;};}

proxy_pass指令將請求轉發到之前定義的web_servers上游服務器組;proxy_set_header指令則用于設置請求頭,傳遞客戶端的真實 IP 等信息,確保后端服務器能夠獲取準確的客戶端信息。

原理剖析

Nginx 的負載均衡基于反向代理機制,它作為客戶端與后端服務器之間的中間層,接收客戶端請求,根據配置的負載均衡算法將請求轉發到合適的后端服務器,并將后端服務器的響應返回給客戶端。IP 哈希算法的實現原理是通過對客戶端 IP 地址進行哈希計算,得到一個固定范圍內的哈希值,再將該哈希值映射到后端服務器列表中的某一臺服務器。這樣,來自同一 IP 地址的請求在哈希值不變的情況下,會始終被分發到同一臺后端服務器,從而實現會話保持。

高可用性驗證:應對服務器故障的能力

模擬服務器故障場景

為了驗證 Nginx 負載均衡的高可用性,我們可以模擬后端服務器故障的場景。例如,關閉其中一臺后端 Web 服務器:

\# 關閉192.168.1.30服務器ssh 192.168.1.300sudo systemctl stop httpd  # 假設使用Apache作為Web服務器

驗證高可用性

在關閉一臺服務器后,通過curl命令再次訪問 Nginx 服務器:

curl 192.168.1.29

可以發現,Nginx 能夠自動將請求轉發到正常運行的后端服務器,確保服務的連續性。這是因為 Nginx 會定期檢查后端服務器的狀態,當檢測到某臺服務器不可用時,會將其從可用服務器列表中移除,不再向其分發請求,從而實現高可用性。

健康檢查機制

Nginx 通過配置health_check模塊或第三方插件(如ngx_http_upstream_check_module)來實現后端服務器的健康檢查。它可以定期向后端服務器發送請求,根據響應狀態碼、響應時間等指標判斷服務器是否正常運行。當服務器出現故障時,Nginx 會動態調整負載均衡策略,將請求分發到其他正常服務器,保障服務的可用性。

動靜分離:提升性能的關鍵策略

靜態資源目錄創建與文件部署

動靜分離是指將動態資源(如 PHP、Python 腳本生成的頁面)和靜態資源(如圖片、CSS、JS 文件)分開處理,以提高服務器的響應性能。首先,創建靜態資源目錄:

sudo mkdir -p /var/www/static/{img,css,js}

然后,將本地電腦上的靜態資源文件復制到該目錄中:

cd /media/psf/docker\_htmlcp img/\* /var/www/static/img/cp css/\* /var/www/static/css/

Nginx 動靜分離配置

在 Nginx 配置文件中,通過location塊配置靜態資源的訪問規則:

location \~\* \\.(jpg|jpeg|png|gif|css|js|ico)\$ {    root /var/www/static;    expires 15d; # 靜態資源緩存15天    access\_log off; #關閉對此類請求的訪問日志記錄    add\_header Cache-Control "public";#添加自定義響應頭,明確資源可被公共緩存(如 CDN、代理服務器),public:表示資源可被任何緩存(包括中間代理)存儲。}

上述配置中,location ~*通過正則表達式匹配靜態資源的文件擴展名;root指令指定靜態資源的根目錄;expires指令設置資源的緩存時間,減少客戶端重復請求;access_log off關閉靜態資源請求的訪問日志記錄,降低磁盤 I/O;add_header添加Cache-Control響應頭,控制資源的緩存策略。

原理與優勢

動靜分離的核心原理是利用 Nginx 高效的靜態資源處理能力,將靜態資源的請求直接從本地目錄或外部存儲(如 OBS 桶)返回給客戶端,而無需經過后端應用服務器的處理。這樣可以大大減輕后端服務器的負載,提高響應速度。同時,通過合理配置緩存策略,減少了網絡傳輸和服務器資源消耗,提升了用戶體驗。

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

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

相關文章

stm32溫濕度-超聲波-LCD1602結合項目(Proteus仿真程序)

資料下載地址:stm32溫濕度-超聲波-LCD1602結合項目(Proteus仿真程序) 程序實現功能: 程序基于stm32芯片實現了控制LED燈亮滅、按鍵控制、串口通信、電機控制、溫濕度數據采集、超聲波測距、LCD顯示屏顯示內容這幾個功能,并用proteus8進行仿…

新一代python管理工具--uv

uv 工具全方位介紹 起源與背景 uv 是由 Astral(pipx 作者)團隊用 Rust 語言開發的新一代 Python 包和環境管理工具。其目標是解決傳統 pip/venv/conda 在依賴解析慢、環境隔離繁瑣、命令復雜等方面的痛點,為現代 Python 項目提供極速、自動…

路由交換技術-思科拓撲搭建

配置流程 1.搭建網絡拓撲圖。 2.規劃配置IP地址,內網配置為192.168.1.0和192.168.2.0網段。 3.劃分vlan10,vlan20,vlan30。 4.配置靜態、動態路由。配置路由器Router7,使內外網互通。 5.配置鏈路聚合。通過鏈路聚合技術&#xff…

清華大學視覺空間智能新突破!Spatial-MLLM:提升多模態大語言模型的視覺空間智能能力

作者:Diankun Wu, Fangfu Liu, Yi?Hsin Hung, Yueqi Duan 單位:清華大學 論文標題:Spatial-MLLM: Boosting MLLM Capabilities in Visual-based Spatial Intelligence 論文鏈接:https://arxiv.org/pdf/2505.23747 項目主頁&a…

AI與機器學習ML:利用Python 從零實現神經網絡

自線性回歸以來,我們已經涵蓋了很多領域。在本期中,我們將開始了解神經網絡內部工作原理的旅程*。* 如果一個人試圖了解任何使用生成式 AI 的工具、應用程序、網站或其他系統的內部工作原理,那么掌握神經網絡的架構至關重要。在這個故事中&a…

Vim 匹配跳轉與搜索命令完整學習筆記

Vim 匹配跳轉與搜索命令完整學習筆記 文章目錄 Vim 匹配跳轉與搜索命令完整學習筆記1. 括號/結構匹配% - 括號匹配跳轉[[ / ]] - 函數定義跳轉[{ / ]} - 代碼塊邊界跳轉 2. 精確單詞搜索* - 向下精確搜索# - 向上精確搜索 3. 模糊單詞搜索g* - 向下模糊搜索g# - 向上模糊搜索 4…

安卓9.0系統修改定制化____系列 ROM解打包 修改 講解 導讀篇

專欄系列前言: 💝💝💝本專欄作者從事rom系統修改以及手機維修 刷機多年。從當年山寨機開始。歷經安卓4.--至目前的安卓15.合作伙伴遍及各類工作室以及PDA商家 私人玩友等。在廣告機 平板 pda設備 會議機 車機的rom修改中略有經…

Vue3本地存儲實現方案

在 Vue 3 中實現本地存儲(如用戶配置數據),主要通過瀏覽器提供的 localStorage 或 sessionStorage API。以下是詳細實現方案: 基礎實現(原生 API) javascript 復制 下載 // 存儲數據 localStorage.set…

計算機視覺與深度學習 | 2024年至2025年圖像匹配算法總結(原理,公式,代碼,開源鏈接)

圖像匹配算法 一、核心算法分類與技術路線1. **傳統局部特征 + 匹配優化**(魯棒性強,適合資源受限場景)2. **端到端密集匹配網絡**(高精度,適合復雜形變/弱紋理)3. **基于光流思想的匹配網絡**4. **2024-2025年新趨勢**二、核心開源工具庫匯總三、典型代碼流程(以LoFTR為…

瑞芯微 MIPI D-PHY 接收器(RX)驅動學習筆記

驅動文件位置 driver/phy/rockchip/phy-rockchip-mipi-rx.c 1 重要結構體 struct mipidphy_priv {struct device *dev;//表示與驅動程序關聯的設備。它用于設備管理,如設備注冊、注銷等。struct regmap *regmap_grf;//用于映射和訪問通用寄存器文件(Gen…

MySQL從入門到DBA深度學習指南

目錄 引言 MySQL基礎入門 數據庫基礎概念 MySQL安裝與配置 SQL語言進階 數據庫設計與規范化 數據庫設計原則 表結構設計 MySQL核心管理 用戶權限管理 備份與恢復 性能優化基礎 高級管理與高可用 高可用與集群 故障診斷與監控 安全與審計 DBA實戰與運維 性能調…

多個機器人同時加載在rviz及gazebo同一個場景中

1. 配置launch文件 gazebo的加載相對容易,但rviz中加載,需要構建完整的tf樹(world → map(或map_merged)→ odom → base_footprint → base_link → base_scan)才能正常顯示,launch文件主要是…

Text2SQL、Text2API基礎

你有一個能力超強但“不太懂行”的助手(大語言模型LLM)。它能說會道,知識淵博,但它: 不懂你的數據庫: 不知道你的數據庫里有哪些表,表里有哪些字段,這些字段代表什么意思。不懂你的…

JDK 8u231安裝教程 - Windows 64位下載安裝及環境變量配置指南

下載安裝包 把jdk-8u231-windows-x64.exe這個文件下載下來,下載鏈接:https://pan.quark.cn/s/a610ca7e5e9d,隨便放哪兒,比如桌面或者下載文件夾。 雙擊運行安裝 找到下載好的那個exe文件,直接雙擊打開。可能會彈個窗口…

LatentSync V8版 - 音頻驅動視頻生成數字人說話視頻 更新V1.6版模型 支持50系顯卡 支持批量 一鍵整合包下載

LatentSync 是字節跳動開源的一款"AI口型同步神器",簡單來說就是能讓視頻里的人物嘴巴動得和聲音完美匹配的工具。比如你給一段配音,它能自動調整視頻人物的嘴型,按照配音里的聲音說出來,就像真人說話一樣自然。簡單說就…

從一組線段中得出四邊形的算法

原始的需求是使用OpenCV的直線檢測算法(例如LSD)之后,得到一組線段。然后需要從這些線段得到類似矩形的四邊形,用于檢測經過透視變換的矩形物體。這些線段不一定首尾相接,彼此之間可能相交或有一定距離。 以下是需求圖…

提示詞Prompts(2)

摘要: 本文介紹了langchain.prompts中基礎的提示詞模板的高級用法,包括利用PipelinePrompt組合Prompt使用,多模態場景、動態占位符的使用等進行了介紹。 文章目錄 1. 背景2. PipelinePrompt2.1 組合兩個Prompt模板2.2 多模態模板 3. 聊天提示…

服務器代碼知識點補充

目錄 UdpServer: 觀察者模式: remove_if算法 管道補充: 文件的標準輸出 ,標準輸入,標準錯誤 UdpServer: 數據接收模塊關心Adduser 和Deleuser 兩個模塊 線程池關心Route模塊 將這三個方法注冊進服務器 ,但是有臨界區問題(線程池與數據接受模塊可能同時訪問用戶管理模塊,所…

R語言緩釋制劑QBD解決方案之二

藥物層優化研究 在藥物層工藝中水溶劑蒸發起到重要的作用。濕的環境會使丸子聚集,而干的環境影響藥物與MCC的粘合。輸入變量如氣流量,噴霧速率,霧化壓力,和產品溫度對MCC沉著和包衣溶劑蒸發的平衡有影響。進行了帶3個中心點的24-…

Html實現圖片上傳/裁剪/馬賽克/壓縮/旋轉/縮放

cropper下載 https://download.csdn.net/download/dongyan3595/90970115 前端代碼 <!doctype html> <html lang"en"> <head><base href"/aishop/"><meta name"viewport" content"widthdevice-width, initial…