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

Nginx?代理路徑重寫問題解析:為什么前端攜帶了?/api?前綴后端卻無法訪問

 更新時間:2026年07月23日 09:17:54   作者:貓貓不是喵喵.  
在使用Nginx作為反向代理服務器時,經(jīng)常會遇到需要重寫請求路徑的情況,本文給大家介紹Nginx代理路徑重寫問題解析:為什么前端攜帶了?/api?前綴后端卻無法訪問,感興趣的朋友一起看看吧

問題現(xiàn)象

在前后端分離的 Web 項目中,我們經(jīng)常使用 Nginx 作為反向代理服務器。一個典型的配置場景是:前端頁面通過 /api 前綴將請求發(fā)送給 Nginx,期望 Nginx 將這些請求代理到后端服務(例如運行在 http://localhost:8080 的 Spring Boot 應用)。然而,開發(fā)者常常會遇到一個令人困惑的問題:

  • 前端請求:http://your-domain.com/api/user/list
  • Nginx 配置:看起來正確地將/api 路徑代理到了后端。
  • 后端日志:卻顯示收到了 /user/list 的請求,缺少了 /api 前綴。
  • 結果:后端因為沒有/api 這個路由映射,返回 404 錯誤。

為什么前端明明攜帶了 /api 前綴,經(jīng)過 Nginx 代理后,后端收到的請求卻沒有這個前綴了呢?

核心原因:proxy_pass指令的路徑處理規(guī)則

問題的根源在于 Nginx proxy_pass 指令對 URI 的處理方式。其行為取決于 proxy_pass 后跟的代理目標地址是否包含 路徑部分。

規(guī)則一:代理目標地址不帶路徑

proxy_pass 后面的地址只有 協(xié)議://主機:端口,沒有以 / 結尾的路徑時,Nginx 會將 客戶端請求的原始 URI(包含 /api 前綴) 完整地傳遞給后端。

location /api/ {
    # 代理目標不帶路徑
    proxy_pass http://localhost:8080;
}

請求轉換過程

  • 前端請求:GET /api/user/list
  • Nginx 轉發(fā)給后端的請求:GET /api/user/list (發(fā)送到 http://localhost:8080/api/user/list)

這種情況下,后端需要能處理/api/user/list 這個路徑。

規(guī)則二:代理目標地址帶路徑

proxy_pass 后面的地址包含以 / 結尾的路徑時,Nginx 會進行 路徑替換:將location 匹配到的部分(即 /api/)從原始 URI 中刪除,然后將剩余部分拼接到代理目標的路徑后面。

location /api/ {
    # 代理目標帶路徑(以 / 結尾)
    proxy_pass http://localhost:8080/;
}

請求轉換過程

  • 前端請求:GET /api/user/list
  • location /api/ 匹配到 /api/
  • Nginx 將其刪除,剩余 /user/list
  • 拼接到代理目標路徑 / 后面:/user/list
  • Nginx 轉發(fā)給后端的請求:GET /user/list (發(fā)送到 http://localhost:8080/user/list)

這正是大多數(shù)問題出現(xiàn)的原因! 開發(fā)者本意是想把請求代理到后端根路徑,但無意中在 proxy_pass 地址末尾加了一個 /,導致了路徑被“吃掉”。

解決方案與配置示例

根據(jù)你的后端路由設計,選擇以下一種配置方式。

方案一:后端需要完整路徑(包含 /api 前綴)

如果你的后端控制器統(tǒng)一配置了 @RequestMapping("/api") 或類似前綴,你需要讓 Nginx 保留 /api 前綴。

server {
    listen 80;
    server_name your-domain.com;
    location /api/ {
        # 關鍵:proxy_pass 地址末尾不要加 /
        proxy_pass http://localhost:8080;
        # 可選:添加一些常用代理頭
        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;
    }
}

方案二:后端不需要 /api 前綴(更常見)

如果你的后端路由直接從根路徑開始(例如 @GetMapping("/user/list")),你希望 Nginx 去掉 /api 前綴。

server {
    listen 80;
    server_name your-domain.com;
    location /api/ {
        # 關鍵:proxy_pass 地址末尾加上 /
        proxy_pass http://localhost:8080/;
        # 同樣可以添加代理頭
        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;
    }
}

方案三:使用rewrite指令進行更靈活的重寫

如果路徑轉換邏輯更復雜(例如將/api/v1/ 重寫為/v1/),可以使用 rewrite 指令配合 break 標記。

location /api/ {
    # 去掉 /api 前綴,保留其他部分
    rewrite ^/api/(.*)$ /$1 break;
    proxy_pass http://localhost:8080;
    proxy_set_header Host $host;
    # ... 其他頭
}

break 標記表示重寫后的 URI 在當前 location 內不再匹配其他 rewrite 規(guī)則,并直接用于 proxy_pass。

調試與驗證技巧

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
  1. 檢查 Nginx 配置語法:運行 nginx -t 確保配置無誤。
  2. 查看 Nginx 訪問日志:在配置中添加或檢查訪問日志格式,確認 Nginx 收到的原始請求。
  3. 查看后端應用日志:確認后端實際接收到的請求路徑。
  4. 使用 curl 或瀏覽器開發(fā)者工具:直接測試 API 端點,觀察請求和響應。

總結

前端帶/api 前綴而后端收不到”這個經(jīng)典問題的核心在于理解 Nginx proxy_pass 指令的路徑處理規(guī)則:

  • proxy_pass http://backend-host; (無尾隨 /):傳遞完整 URI。
  • proxy_pass http://backend-host/; (有尾隨 /):進行路徑替換,去掉location 匹配的部分。

到此這篇關于Nginx 代理路徑重寫問題解析:為什么前端攜帶了 /api 前綴后端卻無法訪問的文章就介紹到這了,更多相關nginx 代理路徑重寫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Nginx配置文件解析

    Nginx配置文件解析

    Nginx 是一款常用的 Web 服務器軟件,其配置文件用于指定服務器的行為和功能,本文將給大家詳細的解析Nginx配置文件,文中有相關的代碼示例供大家參考,需要的朋友可以參考下
    2023-09-09
  • Nginx幾種負載均衡模式的實現(xiàn)示例

    Nginx幾種負載均衡模式的實現(xiàn)示例

    本文主要介紹了Nginx幾種負載均衡模式的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-10-10
  • nginx增加健康檢查接口的實現(xiàn)示例

    nginx增加健康檢查接口的實現(xiàn)示例

    Nginx作為一款強大的反向代理服務和負載均衡服務,而健康檢查是為了保障nginx能夠準確的轉發(fā)到后端的可用服務,本文主要介紹了nginx增加健康檢查接口的實現(xiàn)示例,感興趣的可以了解一下
    2024-02-02
  • Nginx配置UDP代理的實現(xiàn)

    Nginx配置UDP代理的實現(xiàn)

    使用Nginx作為UDP代理可以幫助您實現(xiàn)數(shù)據(jù)包的轉發(fā)和負載均衡,本文就詳細的來介紹一下Nginx配置UDP代理,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • Nginx解決HTTP跨域兩種實用方案

    Nginx解決HTTP跨域兩種實用方案

    TTP跨域問題是前后端分離開發(fā)中的常見挑戰(zhàn),本文詳解了兩種通過Nginx解決的實用方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-01-01
  • 5種nginx負載均衡配置方法分享

    5種nginx負載均衡配置方法分享

    這篇文章主要介紹了5種nginx負載均衡配置方法分享,分別是nginx自帶的3種方法和2種第三方配置方法,需要的朋友可以參考下
    2014-07-07
  • Nginx 只允許 www 域名訪問并禁止裸域名訪問的實現(xiàn)步驟

    Nginx 只允許 www 域名訪問并禁止裸域名訪問的實現(xiàn)步驟

    通過Nginx配置,可以設定僅允許www域名訪問,禁止或重定向裸域名,提升網(wǎng)站品牌統(tǒng)一性及用戶體驗,設置包括創(chuàng)建針對www的虛擬主機,禁止裸域名訪問,并可選進行裸域名到www的301重定向,完成后,重啟Nginx服務器使配置生效
    2024-10-10
  • 如何修改Nginx版本名稱偽裝任意web server

    如何修改Nginx版本名稱偽裝任意web server

    這篇文章主要介紹了修改Nginx版本名稱偽裝任意web server的方法,非常不錯,具有參考借鑒價值,感興趣的朋友一起學習吧
    2016-08-08
  • Nginx服務器中設置禁止訪問文件或目錄的方法

    Nginx服務器中設置禁止訪問文件或目錄的方法

    這篇文章主要介紹了Nginx服務器中設置禁止訪問文件或目錄的方法,對于協(xié)同遠程管理服務器的情況來講很有實用性,需要的朋友可以參考下
    2015-07-07
  • Nginx服務器作反向代理實現(xiàn)內部局域網(wǎng)的url轉發(fā)配置

    Nginx服務器作反向代理實現(xiàn)內部局域網(wǎng)的url轉發(fā)配置

    這篇文章主要介紹了Nginx服務器作反向代理實現(xiàn)內部局域網(wǎng)的url轉發(fā)實例,文中提到需要注意proxy_read_timeout參數(shù)的相關調整,需要的朋友可以參考下
    2016-01-01

最新評論

威宁| 兴山县| 衡阳县| 岚皋县| 新乡县| 信阳市| 丹江口市| 广饶县| 靖宇县| 迁安市| 同德县| 易门县| 寻乌县| 古田县| 宁晋县| 罗江县| 阿尔山市| 万荣县| 泾阳县| 临漳县| 汝州市| 延吉市| 兰考县| 平谷区| 若尔盖县| 丹东市| 吉首市| 澄江县| 彭阳县| 全州县| 灵石县| 正安县| 左贡县| 乡城县| 吴旗县| 淅川县| 许昌县| 庆元县| 巨鹿县| 嘉兴市| 安龙县|