第一層nginx訪問url如何透傳到第二層nginx

要讓第一層Nginx將客戶端請求的URL完整透傳到第二層Nginx,關鍵在于正確配置proxy_pass指令及路徑拼接規則。以下是具體配置方法和注意事項:

核心配置原則

proxy_pass指令末尾是否添加/會直接影響URL的透傳方式:

  • 不帶/:會將location匹配的路徑連同后續URI一起轉發
  • /:僅轉發location匹配路徑之后的URI(相當于截斷匹配路徑)

場景1:完整透傳所有URL(推薦)

如果希望第一層Nginx將客戶端請求的完整URL(包括路徑和參數)原封不動地轉發到第二層Nginx,配置如下:

第一層Nginx配置

server {listen 80;server_name example.com;# 匹配所有請求(或指定路徑,如/location/)location / {# 關鍵:proxy_pass末尾不帶/,確保完整透傳URLproxy_pass http://第二層Nginx的IP:端口;  # 例如 http://192.168.1.101:8080# 傳遞原始請求頭(確保第二層能獲取完整URL信息)proxy_set_header Host $host;  # 傳遞客戶端訪問的域名proxy_set_header X-Original-URI $request_uri;  # 傳遞完整URI(含參數)proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

第二層Nginx配置

server {listen 8080;  # 接收第一層轉發的端口# 直接處理轉發過來的完整URLlocation / {# 轉發到實際業務服務(如后端API)proxy_pass http://業務服務IP:端口;  # 例如 http://192.168.1.200:8080# 同樣傳遞頭信息(如需業務服務獲取原始URL)proxy_set_header Host $host;proxy_set_header X-Original-URI $http_x_original_uri;  # 傳遞第一層的原始URI}
}

場景2:URL路徑改寫后透傳

如果需要在第一層Nginx修改URL路徑后再轉發(例如添加前綴),可使用rewrite指令:

第一層Nginx配置(路徑改寫示例)

server {listen 80;server_name example.com;# 客戶端訪問 /api/xxx 時,轉發到第二層的 /prefix/api/xxxlocation /api/ {# 改寫URL路徑(在原路徑前添加/prefix)rewrite ^/api/(.*)$ /prefix/api/$1 break;# 轉發到第二層(末尾帶/,配合rewrite使用)proxy_pass http://192.168.1.101:8080;# 傳遞頭信息proxy_set_header Host $host;proxy_set_header X-Original-URI $request_uri;  # 保留原始請求的URI}
}

關鍵驗證方法

  1. 測試URL透傳是否正確
    使用curl發送請求并查看第二層Nginx的日志:

    # 客戶端請求
    curl http://example.com/path?param=123# 查看第二層Nginx的access.log,確認日志中的請求路徑是否為/path?param=123
    
  2. 檢查原始URI
    第二層Nginx可通過$http_x_original_uri變量獲取客戶端原始請求的完整URL(需第一層配置X-Original-URI頭)。

常見問題解決

  • 路徑被截斷:若發現URL路徑丟失,檢查proxy_pass末尾是否多了/,去掉即可完整透傳。
  • 參數丟失:Nginx默認會透傳URL參數,無需額外配置,若參數丟失可能是后端服務處理問題。
  • 域名不匹配:確保proxy_set_header Host $host配置正確,否則第二層可能因Host不匹配拒絕請求。

通過以上配置,即可實現第一層Nginx到第二層Nginx的URL完整透傳,適用于需要多級代理且保留原始請求路徑的場景。


rewrite指令

rewrite ^/api/(.*)$ /prefix/api/$1 break; 是 Nginx 中用于 URL 路徑改寫的核心指令,其作用是將客戶端請求的 URL 路徑按照指定規則重新改寫,再轉發到后端服務。下面詳細解釋其用法和工作原理:

rewrite指令拆解

  1. rewrite:Nginx 的 URL 重寫指令,用于修改請求的 URI 路徑。

  2. ^/api/(.*)$:正則表達式匹配規則(匹配客戶端原始請求路徑):

    • ^:表示字符串的開始
    • /api/:固定匹配以 /api/ 開頭的路徑(如 /api/user/api/order/123
    • (.*):捕獲組,匹配 /api/ 后面的所有字符(包括子路徑和參數),.* 表示任意字符任意長度
    • $:表示字符串的結束
  3. /prefix/api/$1:改寫后的目標路徑:

    • /prefix/api/:在原始路徑前添加的固定前綴
    • $1:引用前面正則表達式中 (.*) 捕獲的內容(即 /api/ 后面的部分)
  4. break:改寫規則的終止標記,意思是“一旦匹配并完成改寫,就停止后續的 rewrite 規則處理”。

實際效果示例

當客戶端請求以下路徑時,會被改寫成對應的新路徑:

客戶端原始請求路徑改寫后的路徑(轉發給后端)說明
/api/user/prefix/api/user$1 捕獲 user
/api/order/123?type=1/prefix/api/order/123?type=1$1 捕獲 order/123?type=1(含參數)
/api/v2/product/prefix/api/v2/product$1 捕獲 v2/product

關鍵注意事項

  1. proxy_pass 配合使用
    rewrite 指令通常用于 location 塊中,配合 proxy_pass 轉發到后端服務。例如:

    location /api/ {# 先改寫路徑rewrite ^/api/(.*)$ /prefix/api/$1 break;# 再轉發到后端(注意 proxy_pass 末尾是否帶 / 不影響這里的改寫結果,因為 rewrite 已處理)proxy_pass http://backend_server;
    }
    
  2. break 標記的作用

    • 如果用 break:改寫后立即停止后續 rewrite 規則,直接用新路徑轉發。
    • 如果用 last:改寫后會重新發起一次請求匹配(可能匹配到其他 location),適合更復雜的多級改寫。
    • 此處用 break 是最常見的場景,避免重復改寫。
  3. 不影響客戶端可見的 URL
    這種改寫是“內部改寫”,客戶端瀏覽器地址欄的 URL 不會變化,僅 Nginx 內部轉發時使用新路徑。

  4. 參數保留
    原始 URL 中的查詢參數(如 ?type=1)會被自動保留到改寫后的路徑中,無需額外配置。

適用場景

  • 當后端服務要求路徑必須包含特定前綴(如 /prefix/),但客戶端請求的路徑沒有該前綴時,用于統一添加前綴。
  • 實現不同客戶端請求路徑到后端服務路徑的映射(如兼容舊版 API 路徑)。
  • 配合多級代理時,在第一層 Nginx 統一調整路徑后再轉發給第二層 Nginx。

通過這個規則,可以靈活地在 Nginx 層面調整請求路徑,而無需修改客戶端或后端服務的代碼。

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

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

相關文章

【2025最新畢業設計】外賣點餐小程序(外賣點餐管理系統)

外賣點餐小程序的設計與實現技術大綱(Vue.js Element UI)需求分析與功能設計用戶需求調研:分析目標用戶群體的核心需求(如快速點餐、支付便捷、訂單跟蹤等)核心功能模塊劃分:用戶端(登錄/注冊、…

兩臺電腦連接交換機,使用其中一臺電腦的網絡上網(NAT轉發)

場景 windows 電腦和 linux電腦連在同一臺交換機上,linux電腦有通過無線網絡。要實現Windows電腦通過交換機共享Linux電腦的無線網絡上網,需將Linux設為網關并進行網絡共享,步驟如下: 一、Linux電腦設置(網關配置&…

OpenCV Mat UMat GpuMat Matx HostMem InputArray等設計哲學

一、概覽: GpuMat對應于cuda;HostMem 可以看作是一種特殊的Mat,其存儲對應cuda在主機分配的鎖頁內存,可以不經顯示download upload自動轉變成GpuMat(但是和GpuMat并無繼承關系);UMat對應于openc…

ATR2652SGNSS全頻段低噪聲放大器

ATR2652S是一款具有高增益、低噪聲系數的低噪聲放大器芯片。支持GNSS全頻段信號,同時GNSS 的兩個頻段可以應用于GNSS雙頻導航接收機中。 采用先進的 SiGe 工藝設計和制作,工藝穩定,低噪聲放大器在 GNSS 整個頻段內可以獲得非常好的射頻性能&a…

大數據中心——解讀60頁IDC云數據中心機房運維服務解決方案【附全文閱讀】

該方案主要面向云數據中心運營管理者、IT 運維人員、企業決策者等,旨在解決云資源和業務網絡管理難題,提升 IT 資源掌控能力。方案核心是 EVM VirtualViz 仿真可視化系統,它整合多源數據,提供 3D 仿真展示,實現數據中心…

環境變量-進程概念(7)

文章目錄Linux 真實調度算法1. queue[140]2. bitmap[5] 位圖3. nr_active4. 活躍進程與過期進程環境變量1. 基本概念2. 命令行參數3. PATH 環境變量4. 環境變量具體操作Linux 真實調度算法 下圖是Linux2.6內核中進程隊列的數據結構,也有Linux2.6內核進程O(1)調度算…

為什么數組可以做到時間復雜度為O(1)的隨機訪問

這個問題涉及數組底層結構與內存尋址機制 一、數組元素在內存中連續存儲 數組在內存中會開辟一塊連續地址空間。假設數組A為int類型,共有n個元素,每個元素大小為4字節,那么他們在內存中的存儲結構可能如下:內存地址數組元素A0x100…

《使用Qt Quick從零構建AI螺絲瑕疵檢測系統》——5. 集成OpenCV:讓程序擁有“視力”

目錄一、概述1.1 背景介紹:賦予應用“視力”1.2 學習目標二、集成OpenCV2.1 安裝OpenCV2.2 在Qt項目中配置CMake三、項目數據集介紹與準備四、圖像的橋梁:ImageProvider與格式轉換五、加載、轉換并顯示圖像六、總結與展望一、概述 1.1 背景介紹&#xf…

智慧駕駛疲勞檢測算法的實時性優化

智慧駕駛疲勞檢測:從技術突破到場景革命全球每年因疲勞駕駛引發的交通事故占比超20%,夜間及長途駕駛場景中這一比例更高。當駕駛員出現疲勞甚至暈倒等危險駕駛行為時,傳統檢測手段因依賴單一傳感器或受環境干擾,存在誤報率高、響應…

USRP X440

產品概述 USRP X440 是 Ettus Research 推出的高性能、多通道、寬帶軟件定義無線電(SDR)系統。基于 Xilinx Zynq UltraScale RFSoC 架構,它提供高密度、相干性的信號收發能力,幫助您快速構建雷達、電子戰(EW&#xff0…

[特殊字符] GitHub 2025年7月月度精選項目 Top5

🚀 GitHub 2025年7月月度精選項目 Top5 本月GitHub有哪些值得關注的優質開源項目?我從數千個新項目中,精選了5個有趣 實用 可演示的倉庫 無論你是開發者、AI愛好者、工具控,還是正在做副業產品,這篇文章都值得收藏&a…

微服務架構下的自動化測試策略調優經驗分享

微服務架構下,自動化測試策略需針對分布式特性、服務自治性和高耦合風險進行針對性調整的關鍵調整方向及實施方法: 一、??測試策略重構:分層與契約驅動?? 1. ??測試金字塔升級為鉆石模型?? ??調整邏輯??:傳統金字塔中UI測試占比過高,而微服務需強化契約測試與…

圖論:并查集

入門 久聞并查集的大名,今天來一探究竟,到底什么是并查集,并查集有什么用? 并查集(Disjoint Set Union, DSU)是一種處理不相交集合的合并及查詢問題的數據結構。 其實并查集的作用主要就有兩個: 1、將兩個元素添加到…

告別靜態文檔!Oracle交互式技術架構圖讓數據庫學習“活“起來

🗺? 當數據庫架構圖學會"互動" 想象一下,你正在學習Oracle數據庫架構,面對密密麻麻的靜態文檔和復雜的組件關系圖,是不是常常感到: 像在迷宮里找路,不知道組件間如何協作?想深入了…

day62-可觀測性建設-全鏈路監控zabbix+grafana

🌟監控api接口 🔍監控zabbix-api接口 生成API tokens命令行測試 curl -s -X POST -H "Content-Type: application/json-rpc" -d {"jsonrpc": "2.0","method": "host.get","params": {&quo…

通過Deepseek找工作

推送的結果如下,對應的AI提示詞在底部: 計算機方向遠程工作職位匯總 整合全球遠程技術崗位 | 支持全地域遠程辦公 | 涵蓋開發、安全、云計算等方向 覆蓋方向:8+個技術領域 薪資范圍:10K-40K/月 工作模式:100%遠程 遠程技術職位列表 職位名稱 技能要求 經驗要求 薪資…

vscode文件顏色,只顯示自己更改的文件顏色、剛git下來的庫,vscode打開后,顯示所有文件都被修改了

問題:git新的庫,然后我用vscode打開,默認顯示所有的文件都更改了,但是我打開他們修改的對比,沒有顯示任何有被修改的地方,是怎么回事 linux/wsl下這么設置就可以了:git config core.autocrlf in…

基于ENMeval包的MaxEnt模型參數優化總結

MaxEnt模型參數優化1. MaxEnt模型優化:增加RM,降低模型過擬合風險,簡易模型,平滑響應曲線,增強模型可解釋性和轉移性(生物入侵)2. 默認參數:FCLQHP,RM12.1. 基于優化的 M…

Docker實踐:使用Docker部署blog輕量級博客系統

Docker實踐:使用Docker部署blog輕量級博客系統一、blog系統介紹1.1 blog介紹1.2 個人博客系統介紹1.3 個人博客使用場景二、本地環境介紹2.1 本地環境規劃2.2 本次實踐介紹三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本四、…

專題:2025電商增長新勢力洞察報告:區域裂變、平臺壟斷與銀發平權|附260+報告PDF、原數據表匯總下載

原文鏈接:https://tecdat.cn/?p43416 當茂名果農對著鏡頭用方言喊出“荔枝現摘現發”,2小時賣出83萬元;當65歲的上海阿姨通過“子女代付”買到人生第一臺智能冰箱——2025年的電商戰場,正在上演三重革命:新興市場的增…