Nginx學習筆記(六)—— Nginx反向代理

📚Nginx學習筆記(六)—— Nginx反向代理

📌 一、反向代理核心概念

本質原理

請求
轉發請求
轉發請求
響應
響應
聚合響應
客戶端
Nginx反向代理
后端服務器1
后端服務器2

? 核心價值

  • 🛡? 安全屏障:隱藏后端服務器真實IP
  • ?? 負載分發:均衡后端服務器流量
  • 🚀 性能加速:集成緩存/壓縮等優化
  • 🔧 統一入口:簡化客戶端訪問邏輯

?? 二、基礎配置語法

核心指令

location /api/ {# 必需指令proxy_pass http://backend_server;  # 轉發到上游服務器組# 請求頭控制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_connect_timeout 3s;   # 連接后端超時proxy_read_timeout 30s;      # 讀取響應超時proxy_send_timeout 30s;      # 發送請求超時
}

關鍵參數詳解

指令默認值作用
proxy_bufferingon啟用響應緩沖區(防后端阻塞)
proxy_buffer_size4k/8k響應頭緩沖區大小
proxy_buffers8 4k/8k響應內容緩沖區數量及大小
proxy_redirectoff重定向URL修正開關

🧩 三、實戰配置案例
🔄 案例1:基礎反向代理(upstream + proxy_pass)
upstream backend {server 192.168.1.101:8080 weight=5; server 192.168.1.102:8080 max_fails=3;keepalive 32;  # 啟用連接池
}server {location /service/ {proxy_pass http://backend;  # 關鍵轉發指令# 連接優化proxy_http_version 1.1;proxy_set_header Connection "";}
}

📌 效果

http://nginx-host/service/request → 轉發到 http://192.168.1.101:8080/request

🛡? 案例2:安全隔離實現
location /internal-api/ {# 物理隔離proxy_pass http://10.0.100.20;  # 內網服務器# 安全控制allow 192.168.1.0/24;   # 僅允許內網IPdeny all;               proxy_hide_header Server;  # 隱藏服務器標識# 防滲透proxy_cookie_path / "/; HttpOnly; Secure";  # Cookie安全加固
}

? 安全增強

  • 🔒 IP白名單過濾
  • 🚫 隱藏服務指紋
  • 🍪 強制Cookie安全策略

📶 案例3:基于IP的流量控制
# 定義限流區域(10MB空間,每秒10請求)
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s;location /download/ {proxy_pass http://backend;# 限流配置limit_req zone=ip_limit burst=20;  # 允許突發20請求limit_req_status 429;              # 超限返回429狀態碼# 差異化限速if ($remote_addr ~ "192.168.1.100") {set $limit_rate 1m;  # 特殊IP限速1MB/s}
}

📊 流量控制邏輯

未超
超過
請求進入
IP是否在白名單?
放行+特殊限速
是否超過10req/s?
正常轉發
返回429錯誤

🚧 案例4:并發連接數限制
# 連接數計數區(1MB可記錄1.6萬IP)
limit_conn_zone $binary_remote_addr zone=conn_zone:10m;server {location /api/ {proxy_pass http://backend;# 單IP最大5并發limit_conn conn_zone 5;  limit_conn_status 503;    # 超限返回503# 慢連接保護proxy_connect_timeout 2s; client_body_timeout 10s;}
}

🛠? 容錯機制

# 故障轉移配置
proxy_next_upstream error timeout http_500 http_502;  # 自動切換故障節點
proxy_next_upstream_tries 3;                          # 最大重試次數

?? 四、高階技巧與陷阱規避
🔧 技巧1:WebSocket代理
location /wsapp/ {proxy_pass http://backend;# WebSocket必需參數proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_read_timeout 3600s;  # 長連接超時
}
🎭 技巧2:多路徑重寫規則
location ~ ^/service/(user|order)/(.*)$ {# 路徑重寫:/service/user/info → /api/user-service/inforewrite ^/service/(.*)/(.*)$ /api/$1-service/$2 break;proxy_pass http://backend;
}
? 常見陷阱:
  1. 502 Bad Gateway錯誤

    # 解決方案:增加超時閾值
    proxy_connect_timeout 5s;
    proxy_read_timeout 60s;
    
  2. Cookie/Session丟失

    # 添加原始主機頭
    proxy_set_header Host $host;  
    proxy_cookie_domain backend.example.com $host;
    

📊 五、調試與監控方案
# 專用調試日志格式
log_format proxy_debug '$remote_addr - $upstream_addr ''$status $upstream_response_time ''"$request" $body_bytes_sent';location /api/ {proxy_pass http://backend;# 注入調試頭add_header X-Backend-IP $upstream_addr;add_header X-Response-Time $upstream_response_time;# 記錄詳細日志access_log /var/log/nginx/proxy.log proxy_debug;
}

監控指標

  • nginx.http.proxy.requests:代理請求計數
  • nginx.http.proxy.response_time:后端響應時間
  • nginx.http.proxy.failures:失敗請求數

🔍 診斷命令

tail -f /var/log/nginx/proxy.log | grep ' 502 '
nginx -T | grep -A20 "location /api/"

📚 總結圖譜

反向代理核心
基礎配置
安全隔離
流量控制
并發限制
proxy_pass
proxy_set_header
IP白名單
Header隱藏
limit_req_zone
limit_rate
limit_conn_zone
proxy_timeout

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

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

相關文章

三伍微電子GSR2406 IoT FEM 2.4G PA 射頻前端模組芯片

三伍微電子GSR2406 IoT FEM 2.4G PA 射頻前端模組芯片規格書Product Description The GSR2406 is a high-performance, fully integrated RF front-end module (FEM) designed for Zigbee technology, Thread, and Bluetooth (including low energy) applications. The GSR2406…

開發避坑指南(24):RocketMQ磁盤空間告急異常處理,CODE 14 “service not available“解決方案

異常信息 Caused by: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 14 DESC: service not available now, maybe disk full, CL: 0.94 CQ: 0.94 INDEX: 0.94, maybe your broker machine memory too small.異常背景 一個項目里面用到了rocketmq&#x…

開源WAF新標桿:雷池SafeLine用語義分析重構網站安全邊界

文章目錄前言【視頻教程】1.安裝Docker2.本地部署SafeLine3.使用SafeLine4.cpolar內網穿透工具安裝5.創建遠程連接公網地址6.固定Uptime Kuma公網地址前言 當個人或企業站點上線后面臨的首要威脅往往來自網絡攻擊——據統計,超過60%的Web應用漏洞利用嘗試在流量到達…

Mac M1探索AnythingLLM+SearXNG

SearXNG 能聚合來自多達 200 多個搜索服務,可私有化部署,并提供了靈活自定義選項。 AnythingLLMSearXNG,剛好能解決AnythingLLM因為網絡限制導致web search不可用的問題。 1 安裝docker 下載mac m1版本的docker并安裝。 https://docs.dock…

模式設計:策略模式及其應用場景

簡介 策略模式(Strategy Pattern)是一種行為型設計模式,它允許在運行時動態選擇算法或行為。核心思想是將算法封裝成獨立的類(策略),使它們可以相互替換,讓算法的變化獨立于使用它的客戶端。 核心思想 解耦:將算法的定義與使用分離。每個算法封裝起來,使它們可以互…

Squash Merge(壓縮合并)和Rebase Merge(變基合并)介紹

文章目錄**1. Squash Merge(壓縮合并)****定義****操作步驟****特點****優點****缺點****2. Rebase Merge(變基合并)****定義****操作步驟****特點****優點****缺點****3. 對比總結****4. 選擇建議****5. 示例場景****Squash Merg…

Linux編程 —— framebuffer

一、framebuffer概念framebuffer:幀緩沖,幀緩存技術Linux內核專門為圖形化顯示提供的一套應用程序接口。二、基本操作步驟1. 打開顯示設備(/dev/fb0) 2. 獲取顯示設備相關參數(分辨率,像素格式)---》ioctl 3. 建立顯存…

文件編輯html

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>文件行內容編輯器</title><script src&…

具有熔斷能力和活性探測的服務負載均衡解決方案

一、整體架構設計 1.核心組件 負載均衡器&#xff1a;負責選擇可用的服務節點健康檢查器&#xff1a;定期檢測服務節點的可用性服務節點管理&#xff1a;維護所有可用節點的狀態信息 2.負載均衡策略 輪詢(Round Robin)隨機(Random)加權輪詢(Weighted Round Robin)最少連接(Leas…

技術演進中的開發沉思-62 DELPHI VCL系列:VCL下的設計模式

今天聊聊設計模式&#xff0c;當然這個章節目前僅限于DELPHI VCL,因為接下來梳理的Factory/Factory Method、Bootstrap 和 ForEach 這三種設計樣例&#xff0c;看似獨立&#xff0c;卻在實際開發中相互配合&#xff0c;共同構建起高效、靈活的程序架構。在 DELPHI VCL 開發的技…

Docker 101:面向初學者的綜合教程

掌握 Docker 已成為軟件開發中的一項關鍵技能。本教程探討了容器化的世界&#xff0c;包括其核心概念、優缺點&#xff0c;以及開始使用容器化的分步指南。 無論是 Docker 的新手&#xff0c;還是希望復習基礎知識的更有經驗的開發人員&#xff0c;本指南都能滿足需求。 什么…

RTOS YAFFS

在 YAFFS (Yet Another Flash File System) 的語境中&#xff0c;“Check Point” 并不是一個標準的、核心的官方術語。它更可能是對 YAFFS 關鍵機制 Summary 或 Checkpointing 功能的非正式表述或理解偏差。其核心含義是指 YAFFS 在特定時刻保存文件系統關鍵元數據的狀態&…

【SpringBoot系列-02】自動配置機制源碼剖析

【SpringBoot系列-02】自動配置機制源碼剖析 咱們天天用Spring Boot&#xff0c;一個SpringBootApplication注解扔進去&#xff0c;啥配置都不用寫&#xff0c;項目就跑起來了。你有沒有過這種疑惑&#xff1a;那些DispatcherServlet、DataSource是從哪冒出來的&#xff1f;今天…

51單片機-51單片機最小系統

本章概述思維導圖&#xff1a;51單片機最小系統51單片機最小系統是51系列單片機&#xff08;如AT89C51、STC89C52等&#xff09;能夠獨立工作的最簡電路配置&#xff0c;它為單片機提供了運行所需的基本條件。51單片機最小系統板是嵌入式系統開發的基礎平臺&#xff0c;集成了單…

git學習1

目錄引入版本控制集中式和分布式版本控制git工作機制代碼托管中心Git常用命令設置用戶簽名初始化本地庫查看庫狀態add和提交版本穿梭git分支操作分支定義分支好處分支操作查看分支創建分支切換分支分支合并&#x1f495;?&#x1fa77;合并沖突git團隊協作團隊內協作跨團隊協作…

redis原理篇--Dict

Dict數據結構一、Redis字典的核心組件Redis字典由三部分構成&#xff1a;dictht&#xff08;哈希表&#xff09;&#xff1a;存儲桶數組與元數據dictEntry&#xff08;哈希節點&#xff09;&#xff1a;存儲鍵值對dict&#xff08;字典主體&#xff09;&#xff1a;包含雙哈希表…

靜態路由主備切換

在網絡中&#xff0c;靜態路由的主備切換是實現網絡冗余的基礎方案之一&#xff0c;通過配置不同優先級的靜態路由&#xff0c;確保主用路徑故障時&#xff0c;流量能自動切換到備用路徑&#xff0c;提升網絡可靠性。以下從知識講解和實驗配置兩部分詳細說明。一、靜態路由主備…

PDF處理控件Aspose.PDF教程:在C#、Java、Python中快速縮小PDF

如果您的PDF太大&#xff0c;無法通過電子郵件發送&#xff0c;或者在線加載時間過長&#xff0c;您可以在幾秒鐘內縮小 PDF 大小。本教程介紹了借助Aspose.PDF使用 C#、Java 和 Python 編程快速縮小PDF的方法。 Aspose.PDF官方試用版下載 通過編程縮小 PDF 尺寸 如果您需要…

AWS EKS 常用命令大全:從基礎管理到高級運維

前言 Amazon Elastic Kubernetes Service (EKS) 是 AWS 提供的托管 Kubernetes 服務,大大簡化了 K8s 集群的部署和管理工作。作為 EKS 管理員或開發者,熟練掌握 kubectl 命令是日常工作的基礎。本文將詳細介紹 EKS 環境中常用的 kubectl 命令,涵蓋集群管理、工作負載操作、…

GitHub Browser-Use 的部署失敗記錄:失敗了,失敗了。。。。

一、項目背景與核心作用 browser-use 是一個開源的瀏覽器自動化工具&#xff0c;通過集成 AI 智能體&#xff08;如 GPT、Claude、DeepSeek 等大型語言模型&#xff09;&#xff0c;實現用自然語言控制瀏覽器操作。其核心目標是 簡化網頁交互自動化&#xff0c;尤其適合復雜、…