最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx轉發(fā)404問題的排查和思考

 更新時間:2023年09月11日 08:55:40   作者:磊叔的技術博客  
本篇文章原自當前業(yè)務遇到的一個實際問題,因為受到所在網(wǎng)絡環(huán)境的因素影響,所以整體排查下來耗費了很大精力,記錄一下Nginx 轉發(fā) 404 問題的排查和思考,需要的朋友可以參考下

項目背景

項目是 toG 項目,部署的網(wǎng)絡環(huán)境是一個大的內(nèi)網(wǎng)環(huán)境(又具體分為內(nèi)網(wǎng)和內(nèi)網(wǎng)互聯(lián)網(wǎng)區(qū)),項目涉及到小程序、前端、后端(又包括 JAVA 和 GO 兩個項目)的部署。整體的部署拓撲圖大致如下:

虛擬 IP 映射:大多數(shù)內(nèi)網(wǎng)如何需要暴露對外訪問,會在出口的核心路由上配置一個虛擬的 IP 作為對外的統(tǒng)一訪問入口。比如你的內(nèi)網(wǎng)地址及端口是 10.13.3.177:8080,則通過虛擬 IP 映射的地址及端口可能是:10.31.31.253:8080。

在這個業(yè)務流程程,訪問路徑是:公網(wǎng)(小程序前臺)-> 內(nèi)網(wǎng)互聯(lián)網(wǎng)區(qū)【10.31.1.142(nginx + 小程序后臺)】 -> 【10.31.31.253 -> 10.13.3.177(nginx+后端)】 -> 【10.233.1.2 -> 172.13.7.249(nginx+后端)】。其中 10.13.3.177 和 172.13.7.249 是兩臺虛擬機,虛擬機上部署了nginx 和 后端服務。

PS:上述所有的 IP 均已做過處理,非正式 IP。

問題

訪問步驟及問題節(jié)點:

  • 1、小程序訪小程序后臺服務
  • 2、小程序后臺服務發(fā)起調(diào)用到 10.31.31.253(這里實際上是 10.31.1.142 要調(diào)用 10.233.1.2 的服務,因為 10.31.1.142 不能直接訪問 10.233.1.2,所以借用 10.31.31.253 來實現(xiàn)一層轉發(fā)邏輯)。

這里會涉及到兩個轉發(fā),

  • 10.31.31.253 對應的 10.13.3.177 這臺機器上的 nginx 需要將 10.31.1.142 的請求轉發(fā)給 10.233.1.2
  • 10.233.1.2 對應的 nginx 需要將請求到當前機器的后臺服務上

在轉發(fā)時通過 10.31.31.253 調(diào)用 10.233.1.2 時出現(xiàn) 404,10.233.1.2 調(diào)用本機后端服務時也出現(xiàn) 404;還有一個 502 是 10.31.1.142 訪問 10.31.31.253 出現(xiàn)的。下面是分析問題的大體過程和解決辦法。

因端口映射導致的訪問 502 問題

前面提到 10.31.31.25310.233.1.2 均是 虛擬 IP ,10.31.31.253:8805 端口映射到虛擬機 10.13.3.177 上的端口是 18805,10.13.3.177 上 nginx 配置的監(jiān)聽端口是 18805,所以 10.31.1.142 在訪問的第一跳是 10.31.31.253:8805,但在實際排查中發(fā)現(xiàn), 10.31.1.142 訪問的是 10.31.31.253:18805,所以出現(xiàn) 502 問題。

狀態(tài)碼 502 表示 HTTP 協(xié)議中的 "Bad Gateway",通常用于表示服務器作為網(wǎng)關或代理時遇到了問題。這個錯誤通常會在一個服務器作為中介時,無法從另一個服務器獲取有效響應以滿足客戶端請求時出現(xiàn)。

proxy_pass 轉發(fā) url 丟棄路徑導致的 404 問題

根據(jù)前面的背景,實際上兩個 404 問題均是因為這個原因導致。10.31.1.142 發(fā)起的請求是 10.31.31.253:8805/miniapp/user/case, nginx access.log 的日志如下:

"POST /miniapp/user/case HTTP/1.1" 404 153 "-" "Java/1.8.0_351"
"POST /miniapp/user/case HTTP/1.1" 404 153 "-" "Java/1.8.0_351"
"POST /miniapp/user/case HTTP/1.1" 404 153 "-" "Java/1.8.0_351"

因為這個請求不是 10.31.31.253 對應的 10.13.3.177 這臺機器上的服務處理,而是直接轉發(fā)給 10.233.1.2 對應的 172.13.7.249 機器的,因此這里出現(xiàn) 404,因為是轉發(fā)到 172.13.7.249 時沒有找到相應的資源。查看 249 機器上的 nginx 訪問日志

"POST /user/case HTTP/1.0" 404 153 "-" "Java/1.8.0_351"
"POST /user/case HTTP/1.0" 404 153 "-" "Java/1.8.0_351"
"POST /user/case HTTP/1.0" 404 153 "-" "Java/1.8.0_351"

可以看到, 249 這臺機器上的請求變成了 /user/case,丟失了 /miniapp 這個 prefix,10.13.3.177 機器的 nginx 配置如下:

location /miniapp/ {
    // 主要是這里
    proxy_pass http://10.31.31.253:8805/;
}

關于這個問題,解決方案大致有如下幾種(來源各種技術文章):

  • 1、修改代理配置:將匹配以 /miniapp 開頭的所有請求,并將它們代理到 10.31.31.253:8805,保持請求 URI 不變。
location /miniapp {
    proxy_pass http://10.31.31.253:8805;
}
  • 2、使用正則表達式捕獲和重寫 URI:捕獲以 /miniapp 開頭的請求,并將 /miniapp 后面的部分傳遞給后端服務器。
location ~ ^/miniapp(/.*)$ {
    proxy_pass http://10.31.31.253$1;
}
  • 3、rewrite 重寫:使用 rewrite 指令將 /miniapp 后面的部分提取出來,然后將其傳遞給后端服務器
location /miniapp/ {
    rewrite ^/miniapp(/.*)$ $1 break;
    proxy_pass http://10.31.31.253;
}
  • 4、保留 location 前綴:就是將 location 前綴保留在 proxy_pass 的后面
location /miniapp/ {
    proxy_pass http://10.31.31.253:8805/miniapp/;
}

經(jīng)測試,方案 1 和 方案 4 是可以解決 404 問題的。其中方案 4 是**有病治病的邏輯,轉發(fā)丟棄則就加上。**這兩個問題對于了解 nginx proxy_pass 配置的同學來說應該一眼就可以看到問題所在,但是 大多數(shù)時候,我們會忽略那些看起來并不是很顯眼的東西,比如 /。

proxy_pass 配置以 / 結尾和不以 / 結尾的區(qū)別

  • 以 / 結尾的proxy_pass配置
location /miniapp/ {
    proxy_pass http://10.31.31.253:8805/;
}

這種配置方式?jīng)]有斜杠 / 結尾,意味著 Nginx 會將原始請求的 URI 原封不動地傳遞給后端服務器。例如,如果原始請求是 http://10.31.1.142/miniapp/user/case,那么 Nginx 會將它代理到http://10.31.31.253:8805/miniapp/user/case。

所以說,如果你希望將請求映射到后端服務器的根目錄,則可以使用以斜杠 / 結尾的配置。如果你希望保持URI不變,可以使用不以 / 結尾的配置。

關于 proxy_pass 以及 location

網(wǎng)上關于這兩個介紹的文章非常多,本篇不做過多的闡述。

  • proxy_pass 指令用于定義 Nginx 的 反向代理 功能。它指定了將客戶端請求代理到的后端服務器的地址。
  • location 指令用于匹配客戶端請求的 URI,然后定義如何處理這些請求。

問題其實不是很復雜,主要還是對于 nginx 的一些配置作用不大清楚,另外就是在實際排查過程中,因為鏈路和網(wǎng)絡環(huán)境問題走了很多彎路;但是如果把這些信息梳理清楚了,就會撥云見日;問題就在那里,復雜的是過程。

以上就是Nginx轉發(fā)404問題的排查和思考的詳細內(nèi)容,更多關于Nginx轉發(fā)404的資料請關注腳本之家其它相關文章!

相關文章

  • nginx搭建高可用集群的實現(xiàn)方法

    nginx搭建高可用集群的實現(xiàn)方法

    本文主要介紹了nginx搭建高可用集群的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Nginx多個前端服務配置方式詳解

    Nginx多個前端服務配置方式詳解

    這篇文章主要介紹了Nginx多個前端服務配置方式,主要包括多個location配置,多個server配置,配置方式本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2022-03-03
  • 如何解決Nginx請求轉發(fā)將POST變?yōu)镚ET問題

    如何解決Nginx請求轉發(fā)將POST變?yōu)镚ET問題

    這篇文章主要介紹了如何解決Nginx請求轉發(fā)將POST變?yōu)镚ET問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Nginx?部署及配置詳細步驟(附詳細代碼)

    Nginx?部署及配置詳細步驟(附詳細代碼)

    Nginx是一個web服務器也可以用來做負載均衡及反向代理使用,目前使用最多的就是負載均衡,這篇文章主要介紹了Nginx部署及配置的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-11-11
  • Nginx配置ssl實現(xiàn)https的全過程記錄

    Nginx配置ssl實現(xiàn)https的全過程記錄

    這篇文章主要給大家介紹了關于Nginx配置ssl實現(xiàn)https的相關資料,文章通過實例代碼介紹的非常詳細,對大家學習或者使用Nginx具有一定的參考學習價值,需要的朋友可以參考下
    2022-03-03
  • 詳解nginx使用ssl模塊配置支持HTTPS訪問

    詳解nginx使用ssl模塊配置支持HTTPS訪問

    這篇文章主要介紹了詳解nginx使用ssl模塊配置支持HTTPS訪問,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Nginx 安裝與配置規(guī)則入門詳解

    Nginx 安裝與配置規(guī)則入門詳解

    這篇文章主要介紹了Nginx 安裝與配置規(guī)則入門詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • 在Nginx服務器上配置Google反向代理的基本方法

    在Nginx服務器上配置Google反向代理的基本方法

    這篇文章主要介紹了在Nginx服務器上配置Google反向代理的基本方法,文中使用到了SSL來加密反向代理,需要的朋友可以參考下
    2015-12-12
  • Nginx 應用范圍和使用詳解

    Nginx 應用范圍和使用詳解

    這篇文章主要介紹了Nginx 應用范圍和使用詳解的相關資料,需要的朋友可以參考下
    2017-03-03
  • Keepalived+Nginx+Tomcat 實現(xiàn)高可用Web集群的示例代碼

    Keepalived+Nginx+Tomcat 實現(xiàn)高可用Web集群的示例代碼

    這篇文章主要介紹了Keepalived+Nginx+Tomcat 實現(xiàn)高可用Web集群的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09

最新評論

西城区| 威宁| 穆棱市| 湘潭市| 鹿邑县| 西乌珠穆沁旗| 绍兴市| 米泉市| 常州市| 资阳市| 太原市| 衡山县| 保靖县| 浮山县| 颍上县| 西峡县| 汨罗市| 南召县| 清流县| 揭阳市| 胶南市| 通山县| 靖江市| 安国市| 蒲城县| 宝丰县| 镇雄县| 射洪县| 长乐市| 高青县| 江城| 黑水县| 金门县| 崇仁县| 长岛县| 北安市| 洪洞县| 崇左市| 凌海市| 肃北| 鄢陵县|