【Nginx】Nginx進階指南:解鎖代理與負載均衡的多樣玩法

在Web服務的世界里,Nginx就像是一位多面手,它不僅能作為高性能的Web服務器,還能輕松勝任代理服務器、負載均衡器等多種角色。今天,我們就來深入探索Nginx的幾個常見應用場景,通過實際案例和關鍵配置解析,帶你領略Nginx的無限魅力!


一、代理數據庫:守護你的數據安全

場景描述

在分布式系統中,數據庫往往是系統的核心,為了保護數據庫免受直接訪問的風險,我們通常會使用Nginx作為數據庫的代理層。這樣,外部請求首先到達Nginx,再由Nginx轉發到實際的數據庫服務器,既增加了安全性,又便于實現負載均衡。

關鍵配置與解釋

stream {upstream mysql {hash $remote_addr consistent;  # 使用一致性哈希算法,根據客戶端IP分配請求到固定的后端服務器server 192.168.xxx.x:3306 weight=1 max_fails=2 fail_timeout=3600s;  # 定義后端MySQL服務器,設置權重、最大失敗次數和失敗超時時間}server {listen 9002;  # 代理服務器監聽的端口proxy_connect_timeout 3600s;  # 連接后端服務器的超時時間proxy_timeout 36000s;  # 代理超時時間,這里設置為10小時(示例中5分鐘為筆誤,實際應根據需求調整)proxy_pass mysql;  # 將請求轉發到上面定義的mysql上游}
}

解釋

  • upstream塊定義了后端服務器組,這里使用hash算法確保同一客戶端的請求總是被轉發到同一臺后端服務器,保持會話一致性。
  • server塊配置了代理服務器的監聽端口和轉發規則,proxy_timeout應合理設置,避免長時間占用資源。

二、代理WebSocket:實現實時通信的橋梁

場景描述

WebSocket是一種在單個TCP連接上進行全雙工通信的協議,廣泛應用于實時聊天、在線游戲等場景。Nginx可以輕松代理WebSocket連接,確保客戶端與服務器之間的穩定通信。

關鍵配置與解釋

location /usvapi {proxy_pass http://xxxxxx/usvapi;  # 轉發到實際的WebSocket服務端proxy_redirect off;  # 關閉重定向,確保WebSocket連接不受影響proxy_set_header Host $http_host;  # 設置請求頭中的Host字段proxy_set_header X-Real-IP $remote_addr;  # 傳遞客戶端真實IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 傳遞客戶端IP鏈proxy_set_header Upgrade $http_upgrade;  # 升級協議為WebSocketproxy_set_header Connection "upgrade";  # 保持長連接
}

解釋

  • proxy_pass指定了WebSocket服務的實際地址。
  • proxy_set_header系列指令用于傳遞必要的請求頭信息,特別是UpgradeConnection,它們是WebSocket連接建立的關鍵。

三、靜態資源服務:加速你的網站加載

場景描述

對于包含大量靜態資源(如圖片、CSS、JavaScript文件)的網站,使用Nginx直接提供靜態資源服務可以顯著提高加載速度,減輕后端服務器的負擔。

關鍵配置與解釋

server {listen 80;server_name example.com;location /static/ {alias /path/to/your/static/files/;  # 靜態文件存放路徑expires 30d;  # 設置緩存過期時間,減少重復請求access_log off;  # 可選:關閉訪問日志,減少I/O壓力}# 其他配置...
}

解釋

  • location /static/匹配以/static/開頭的請求。
  • alias指定了靜態文件的實際存放路徑。
  • expires設置了瀏覽器緩存靜態資源的時間,提高再次訪問時的加載速度。

四、HTTPS反向代理:保障數據傳輸安全

場景描述

隨著網絡安全意識的提升,HTTPS已成為網站的標準配置。Nginx可以作為反向代理,將HTTP請求轉換為HTTPS,為后端服務提供加密保護。

關鍵配置與解釋

server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/your/cert.pem;  # SSL證書路徑ssl_certificate_key /path/to/your/key.pem;  # SSL私鑰路徑location / {proxy_pass http://backend_server;  # 轉發到后端HTTP服務proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;# 其他必要的proxy_set_header...}
}

解釋

  • listen 443 ssl;表示監聽443端口并啟用SSL。
  • ssl_certificatessl_certificate_key指定了SSL證書和私鑰的路徑。
  • proxy_pass將加密后的請求轉發到后端HTTP服務,實現HTTPS到HTTP的轉換。

總結

Nginx以其靈活性和高性能,在Web服務領域占據著舉足輕重的地位。無論是代理數據庫、WebSocket,還是提供靜態資源服務、HTTPS反向代理,Nginx都能游刃有余。通過合理配置,我們可以充分發揮Nginx的潛力,為網站或應用提供穩定、高效、安全的服務。希望今天的分享能激發你對Nginx更多可能性的探索,讓我們一起在技術的海洋中乘風破浪!

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

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

相關文章

原創-銳能微82xx系列電能計量芯片軟件驅動開發與精度校準流程完全指南

引言 電能計量芯片的軟件驅動開發是整個計量系統的核心,它直接決定了計量精度、系統穩定性和功能完整性。銳能微82xx系列電能計量芯片憑借其強大的數字信號處理能力和豐富的功能特性,為開發者提供了靈活的軟件開發平臺。本文將詳細介紹82xx系列芯片的軟…

如何使用 Apache Ignite 作為 Spring 框架的緩存(Spring Cache)后端

這份文檔是關于 如何使用 Apache Ignite 作為 Spring 框架的緩存(Spring Cache)后端,實現方法級別的緩存功能。 這和前面我們講的 Spring Data Ignite 是兩個不同的概念。我們先明確區別,再深入理解。🔁 一、核心區別…

Android 超大圖片、長圖分割加載

在Android開發中,處理大圖片的加載是一個常見且重要的問題,尤其是在需要顯示高分辨率圖片時。大圖片如果不正確處理,可能會導致內存溢出或應用性能下降。下面是一些常用的策略和技術來優化大圖片的加載:1. 使用圖片壓縮庫a. Glide…

Linux:理解操作系統

文章目錄數據流動操作系統數據流動 軟件運行,必須先加載到內存,本質要把磁盤上的文件 加載到內存。 我們寫的算法是處理存儲器里面的數據,數據就是文件,我們自己寫的可執行文件。 圖中QQ就是軟件,加載內存后進行下一步…

【每日一錯】PostgreSQL的WAL默認段大小

文章目錄題目擴展學習WAL工作原理流程圖題目 擴展學習 WAL(Write Ahead Log)預寫日志: WAL是PostgreSQL先寫日志、后寫數據的機制,用來防止數據丟失、提升數據恢復能力。 流程: 事務先寫日志文件(WAL&…

Visual Studio Code 使用指南 (2025年版)

Visual Studio Code (VS Code) 是一款由微軟開發的免費、開源、跨平臺的現代化輕量級代碼編輯器,憑借其強大的核心功能、豐富的擴展生態系統以及高度可定制性,已成為全球數百萬開發者的首選工具。本指南旨在幫助您快速上手 VS Code,掌握其核心…

【Java】JVM虛擬機(java內存模型、GC垃圾回收)

一、Java內存模型(JMM)JMM(Java Memory Model,Java 內存模型)是 Java 虛擬機規范中定義的一種抽象概念,用于規范 Java 程序中多線程對共享內存的訪問規則,解決可見性、原子性和有序性問題&#…

二叉樹算法之【二叉樹的層序遍歷】

目錄 LeetCode-102題 LeetCode-102題 給定二叉樹的根節點root&#xff0c;返回其節點值的層序遍歷&#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 class Solution {public List<List<Integer>> levelOrder(TreeNode root) {// checkif (r…

uniapp+vue3——通知欄標題縱向滾動切換

介紹 取巧&#xff0c;使用縱向輪播實現 <!-- 通知欄 --> <view class"noticeBox" v-if"notice.length>0"><image src"/static/images/index/noticeIcon.png" mode"aspectFill"></image><swiper class&…

BilldDesk 開源、免費、吊打收費軟件!白嫖黨最愛!遠程控制神器,沒有任何連接次數和畫質限制,同時顯示多屏、屏幕墻等高級功能

遠程控制軟件哪個好用&#xff1f;TeamViewer收費太貴&#xff0c;向日葵限制太多&#xff0c;QQ遠程又不穩定……別擔心&#xff01;今天給大家推薦一款完全免費、開源的遠程控制神器——BilldDesk&#xff01;它不僅功能強大&#xff0c;而且支持Windows、macOS、Linux、Andr…

ios UIAppearance 協議

一、前言 iOS 上提供了一個比較強大的工具UIAppearance&#xff0c;我們通過UIAppearance設置一些UI的全局效果&#xff0c;這樣就可以很方便的實現UI的自定義效果又能最簡單的實現統一界面風格。 (id)appearance ; 這個是這個協議里最重要的方法了 . 這個方法是統一全部改&am…

進階數據結構:用紅黑樹實現封裝map和set

? 嘿,各位技術潮人!好久不見甚是想念。生活就像一場奇妙冒險,而編程就是那把超酷的萬能鑰匙。此刻,陽光灑在鍵盤上,靈感在指尖跳躍,讓我們拋開一切束縛,給平淡日子加點料,注入滿滿的 passion。準備好和我一起沖進代碼的奇幻宇宙了嗎?Let’s go! 我的博客:yuanManGa…

【數據結構初階】--二叉樹(五)

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

redis布隆過濾器解決緩存擊穿問題

在電商系統中&#xff0c;商品詳情頁是一個典型的高頻訪問場景。當用戶請求某個商品的詳情時&#xff0c;系統會優先從緩存中獲取數據。如果緩存中沒有該商品的詳情&#xff0c;系統會去數據庫查詢并更新緩存。然而&#xff0c;如果某個熱門商品的緩存失效&#xff0c;大量請求…

1+1>2!特征融合如何讓目標檢測更懂 “場景”?

來gongzhonghao【圖靈學術計算機論文輔導】&#xff0c;快速拿捏更多計算機SCI/CCF發文資訊&#xff5e;在多模態大模型&#xff08;MLLM&#xff09;時代&#xff0c;特征融合與目標檢測的研究方向正變得愈發關鍵。從紅外與可見光圖像的融合&#xff0c;到語音活動檢測中的特征…

詳解賽靈思SRIO IP并提供一種FIFO封裝SRIO的收發控制器仿真驗證

概述RapidIO標準定義為三層&#xff1a;邏輯層、傳輸層、物理層。邏輯層&#xff1a;定義總體協議和包格式&#xff0c;包含設備發起/完成事務的必要信息。傳輸層&#xff1a;提供包傳輸的路由信息&#xff08;對頂層不可見&#xff09;。物理層&#xff1a;描述設備級接口細節…

深度學習:簡介與任務分類總覽

一、什么是深度學習&#xff1f;1.1 深度學習的定義深度學習&#xff08;Deep Learning&#xff09;是機器學習的一種特殊形式&#xff0c;它依賴于具有多層結構的神經網絡自動從數據中學習特征并完成任務&#xff0c;如圖像識別&#xff0c;語音識別&#xff0c;自然語言處理等…

MSPM0開發學習筆記:二維云臺畫圖(2025電賽 附源代碼及引腳配置)

前言 今年的電賽&#xff08;2025&#xff09;&#xff0c;很多題都與云臺相關&#xff0c;因此為備戰電賽&#xff0c;博主這邊也是準備了一個由兩個42步進電機驅動的云臺并提前進行調試&#xff0c;避免賽題出來之后手忙腳亂的&#xff0c;這邊的兩個42步進電機采用同一個驅…

借助 Wisdom SSH 的 AI 助手構建 Linux 開發環境

借助Wisdom SSH的AI助手構建Linux開發環境 在Linux系統的開發場景中&#xff0c;快速、準確地搭建開發環境至關重要。Wisdom SSH憑借其強大的AI助手&#xff0c;能極大簡化這一過程&#xff0c;其官網為ssh.wisdomheart.cn。以下以在Ubuntu 22.04服務器上構建Python開發環境&am…

Python 程序設計講義(44):組合數據類型——集合類型:創建集合

Python 程序設計講義&#xff08;44&#xff09;&#xff1a;組合數據類型——集合類型&#xff1a;創建集合 目錄Python 程序設計講義&#xff08;44&#xff09;&#xff1a;組合數據類型——集合類型&#xff1a;創建集合一、集合的特征二、創建集合&#xff1a;使用set()函…