Nginx 運維實戰: 什么是反向代理,如何配置?

在互聯網的龐大架構中,Nginx 作為一款高性能的 Web 服務器和反向代理服務器,發揮著至關重要的作用。其中,反向代理功能更是 Nginx 被廣泛應用的核心原因之一。本文將深入探討什么是反向代理,以及如何在 Nginx 中進行反向代理的配置。

一、反向代理的概念與原理

反向代理的定義

反向代理是指以代理服務器來接受 Internet 上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給 Internet 上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。

正向代理 vs 反向代理

我們先來簡單對比一下正向代理與反向代理的區別:

類型誰隱藏使用場景示例

正向代理

客戶端

用戶訪問外部資源時隱藏自己

翻墻代理、公司上網代理

反向代理

服務端

外部用戶訪問內部服務時隱藏后端

CDN、負載均衡、Web 服務器

反向代理的核心思想是:客戶端不知道真正的服務器是誰,所有請求都先發給反向代理服務器,由它轉發到后端真實服務器,并將結果返回給客戶端。

反向代理的作用

  • 負載均衡:當有大量客戶端請求到達時,反向代理服務器可以根據預設的算法,將請求分發到不同的后端服務器上,避免單個服務器負載過高,提高整個系統的處理能力和穩定性 。

  • 安全性提升:隱藏后端真實服務器的 IP 地址,使客戶端無法直接與后端服務器通信,降低了后端服務器遭受攻擊的風險。同時,反向代理服務器還可以對請求進行過濾和驗證,攔截惡意請求,如 SQL 注入、跨站腳本攻擊(XSS)等。

  • 緩存加速:反向代理服務器可以緩存后端服務器返回的靜態資源(如圖片、CSS、JavaScript 文件等)和動態內容。當有相同的請求再次到達時,直接從緩存中返回數據,減少了后端服務器的壓力,也加快了客戶端獲取數據的速度,提升用戶體驗。

  • 服務高可用:當某一臺后端服務器出現故障時,反向代理服務器可以自動將請求轉發到其他正常運行的服務器上,保證服務的連續性,實現服務的高可用性。

  • 統一入口:對外提供一個統一的訪問地址,便于管理。

反向代理的工作原理

客戶端向反向代理服務器發送請求,反向代理服務器根據配置的規則(如請求的 URL、客戶端 IP 地址等),將請求轉發到合適的后端服務器。后端服務器處理請求后,將響應結果返回給反向代理服務器,反向代理服務器再將響應結果返回給客戶端。整個過程中,客戶端并不知道真正處理請求的后端服務器是誰,它只與反向代理服務器進行交互。

二、Nginx 反向代理的配置

基本反向代理配置

假設你有一個運行在服務器端口為 3000 的服務,現在想通過域名 http://api.example.com 訪問這個服務。

server {listen 80;server_name api.example.com;location / {proxy_pass http://127.0.0.1:3000;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_set_header X-Forwarded-Proto $scheme;}
}

說明

  • listen 80:表示 Nginx 監聽 80 端口。

  • server_name:指定域名,若沒有域名或通過 IP 訪問,可忽略此配置。

  • location /?:定義請求的 URL 匹配規則,這里表示所有請求都將被代理到后端服務器。

  • proxy_pass:指定后端服務器的地址和端口。

  • proxy_set_header:設置請求頭,用于傳遞原始信息給后端,例如:Host表示傳遞原始請求的域名,X-Real-IP表示獲取客戶端真實IP,X-Forwarded-For表示傳遞完整的代理路徑,X-Forwarded-Proto表示傳遞后端請求使用的協議。

基于 URL 的反向代理配置

有時候,我們可能希望根據不同的 URL 將請求轉發到不同的后端服務器。例如,將以/api開頭的請求轉發到一個 API 服務器,將其他請求轉發到另一個 Web 服務器。

server {listen 80;server_name your_domain.com;location /api {proxy_pass http://api_server_ip:port; ?# API服務器地址和端口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_set_header X-Forwarded-Proto $scheme;}location / {proxy_pass http://web_server_ip:port; ?# Web服務器地址和端口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_set_header X-Forwarded-Proto $scheme;}
}

添加 SSL 支持(HTTPS)

如果你有 SSL 證書(比如 Let's Encrypt),可以添加 HTTPS 支持:

server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;location / {proxy_pass http://127.0.0.1:3000;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_set_header X-Forwarded-Proto $scheme;}
}# 強制跳轉 HTTPS
server {listen 80;server_name example.com;return 301 https://$host$request_uri;
}

負載均衡配置

Nginx 支持多種負載均衡算法,如輪詢(默認)、加權輪詢、IP 哈希等。下面以加權輪詢為例,介紹如何配置負載均衡。

upstream backend_servers {server 192.168.1.101 weight=3; ?# 權重為3server 192.168.1.102 weight=1; ?# 權重為1
}server {listen 80;server_name your_domain.com;location / {proxy_pass http://backend_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_set_header X-Forwarded-Proto $scheme;}
}

總結

反向代理是 Nginx 的重要功能之一,通過合理配置反向代理,我們可以實現負載均衡、提升安全性、加速服務響應等目標。在實際應用中,根據具體的業務需求和服務器架構,靈活運用 Nginx 的反向代理配置,能夠打造出高性能、高可用的 Web 服務系統。

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

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

相關文章

短視第三套多功能主題3.0二開模板蘋果CMS插件重構版

這款短視第三套多功能主題二開模板蘋果CMS插件重構版源碼,基于市面上現有的二開版本進行的重制修正更新。目前已經完美適配新版 4049 以上的蘋果Cms系統,無需擔心因系統版本問題導致的不兼容情況。?主題插件重構后支持一鍵啟動插件自動安裝模板&#xf…

詳解力扣高頻SQL50題之1148. 文章瀏覽 I【入門】

傳送門:1148. 文章瀏覽 I 題目 Views 表: ---------------------- | Column Name | Type | ---------------------- | article_id | int | | author_id | int | | viewer_id | int | | view_date | date | ---------------------- 此表可能會存在重復…

內外網互傳文件 安全、可控、便捷的跨網數據交換

內外網互傳文件 安全、可控、便捷的跨網數據交換破解企業數字化痛點,重新定義文件傳輸標準在數字化轉型浪潮中,企業面臨著前所未有的挑戰:內網系統需要嚴密防護,外網協作又要高效便民。如何在網絡安全與業務效率之間找到完美平衡&…

性能監控裝飾器-python

看項目時,發現一個性能監控裝飾器,感覺挺有意思的。于是借鑒了他的思路,自己重新寫了我認為更簡潔的代碼。作用:可以放在類上和方法上,如果放在類上,則監控所有方法。根據設置的閾值,判斷方法執…

qt常用控件-05

文章目錄qt常用控件-05LineEditTextEditcombo box結語很高興和大家見面,給生活加點impetus!!開啟今天的編程之路!! 今天我們進一步c11中常見的新增表達 作者:?( ‘ω’ )?260 我的專欄:qt&am…

Python進階知識之pandas庫

目錄 一、Series:一維帶標簽的數組 二、DataFrame:二維表格型數據結構 三、Series 的核心操作 四、 DataFrame 的核心操作 五、 索引的特殊用法 六、 loc 與 iloc:DataFrame 的高級查詢 七、綜合案例 一、Series:一維帶標簽…

【GIT】基礎知識及基本應用

很高興為您詳細介紹Git的相關知識。Git是一個分布式版本控制系統,常用于軟件開發中的代碼管理和協作。以下是關于Git的一些基礎知識:1. 安裝和配置安裝:Windows:可以從GitHub下載適用于Windows的安裝包。MacOS:可以通過…

Maven Scope標簽:解鎖Java項目依賴管理的秘密武器

一、Maven 與依賴管理簡介在 Java 項目開發的龐大體系中,Maven 堪稱基石般的存在,發揮著極為關鍵的作用。它遵循 “約定優于配置” 的理念,讓項目的構建過程變得規范有序、結構化且具備良好的重復性 。比如,它強制執行標準的項目結…

IP43半加固筆記本L156H

IP43半加固筆記本L156H 產品特性:● 標配Intel I7-7700HQ 4核8線程處理器 ● 操作系統支持Windows7/10 64bit / Li n u x ● DDR4 16G 高速內存 zui高支持64G ● 全高清顯示面板15.6寸,1920X1080 ● 內置海德射頻模塊SMA接口 ● 工作溫度:…

ZooKeeper 是什么?

ZooKeeper 是一個分布式協調服務,由 Apache 基金會開發,專為分布式系統設計。它提供了高可用、高性能、一致性的核心服務,幫助分布式應用解決諸如配置管理、命名服務、分布式鎖、集群協調等問題。ZooKeeper 的核心特點:簡單易用&a…

Java學習第六十三部分——K8s

目錄 📫 一、關鍵概述 🔍 ??二、定義起源?? 🚀 ??三、核心特點?? 🏗? ??四、核心組件?? 🧩 ??五、資源對象?? ? ??六、應用場景?? 🧱 ??七、Java與K8s 🛠? ?…

【自用】JavaSE--階段測試

考試題目第一題(10分)需求目前有100名囚犯,每個囚犯的編號是1-200之間的隨機數。現在要求依次隨機生成100名囚犯的編號(要求這些囚犯的編號是不能重復的),然后讓他們依次站成一排。(注:位置是從…

Vulnhub Matrix-Breakout-2-Morpheus靶機攻略

1.下載靶機 靶機下載地址:https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova 下載后使用VM打開,后續選擇安裝地址開啟就算是下載好了 2.主機發現 查看網絡適配器模式(NET模式),找到NET…

OpenCV —— 繪制圖形

😶?🌫?😶?🌫?😶?🌫?😶?🌫?Take your time ! 😶?🌫?😶?🌫?😶?🌫?😶?🌫?…

RHCE(4)

主:從:

網絡安全作業三

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用戶登錄</title><link rel"style…

深入理解 ThreadLocal:從原理到最佳實踐

&#x1f4dd; 前言&#xff1a;為什么你需要了解 ThreadLocal&#xff1f;在多線程并發編程中&#xff0c;線程安全始終是一個繞不開的話題。我們常常需要為每個線程維護一份獨立的上下文數據&#xff0c;例如用戶信息、事務 ID、日志追蹤 ID 等。這些數據不能被多個線程共享&…

AD一張原理圖分成多張原理圖

先選中你要作為主級原理圖的那張原理圖&#xff0c;我這里是Sheet1,點擊設計&#xff08;D&#xff09;&#xff0c;再點擊create sheet symbol from sheet&#xff08;這個不能選錯&#xff09;快捷鍵&#xff1a;DY彈窗中選擇要加入的次級原理圖左擊鼠標放置重復上面的動作&a…

AI大模型資源

網址 https://sass.kupepoem.cn/ 登錄-選擇模型 打開上述網址后如下操作&#xff1a; 進入后&#xff0c;所有模型均可使用&#xff1a; o4-mini&#xff08;支持Deep Research深入研究&#xff09; 選擇o4-mini模型 選擇深度研究 要研究什么&#xff0c;對話直接輸入即可。…

論文閱讀--《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》

好的&#xff0c;這是《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》論文的中文翻譯&#xff1a;[文件名稱]: Besting_the_Black-Box_Barrier_Zones_for_Adversarial_Example_Defense.pdf [文件內容開始]第 1 頁 收稿日期&#xff1a;2021年10月1…