若依框架文件上傳返回路徑端口錯誤 - Nginx代理環境下serverConfig.getUrl()獲取端口異常

目錄

  • 一 、問題描述
  • 二、問題現象
  • 三、問題根本原因
    • 3.1 代碼分析
    • 3.2 問題核心
  • 四、解決方案
  • 五、總結

若依錯誤

一 、問題描述

在使用若依框架進行項目開發時,遇到了一個令人困擾的問題:文件上傳功能在本地開發環境運行正常,但部署到服務器后,上傳文件返回的訪問路徑缺少端口號,導致無法正常訪問上傳的文件。

二、問題現象

本地環境:http://ip:8080/profile/xxx.jpg ?
Nginx代理后:http://ip/profile/xxx.jpg ?(缺少端口號)
期望結果:http://ip:8080/profile/xxx.jpg ?

三、問題根本原因

經過深入分析,發現問題的根本原因是:Nginx代理配置中Host頭信息不完整,導致后端獲取不到正確的端口信息。

3.1 代碼分析

若依框架中的URL生成邏輯:

// 文件上傳返回URL生成
String url = serverConfig.getUrl() + fileName;public String getUrl() {HttpServletRequest request = ServletUtils.getRequest();return getDomain(request);
}public static String getDomain(HttpServletRequest request) {StringBuffer url = request.getRequestURL();  // 關鍵:這里獲取的URL缺少端口號String contextPath = request.getServletContext().getContextPath();return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString();
}

3.2 問題核心

request.getRequestURL() 在Nginx代理環境下獲取到的URL信息不包含端口號,因為Nginx傳遞給后端的Host頭信息不完整。

四、解決方案

最佳解決方案:修正Nginx配置
問題配置:

location /prod-api/ {proxy_set_header Host $http_host;  # ? 缺少端口信息proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://localhost:8080/;
}

正確配置:

location /prod-api/ {proxy_set_header Host $http_host:8080;  # ? 明確指定端口號proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://localhost:8080/;
}

核心差異說明

配置項效果后端獲取到的Host
Host $http_host? 不包含端口yourdomain.com
Host $http_host:8080? 包含端口yourdomain.com:8080

五、總結

在使用若依框架時,若文件上傳后返回的訪問路徑因Nginx代理丟失端口號(如 http://ip/profile/xxx.jpg應為 http://ip:8080/profile/xxx.jpg),其根本原因是Nginx默認配置未傳遞完整Host頭(proxy_set_header Host $http_host不含端口)。??解決方案??只需在Nginx配置中顯式添加端口(如 proxy_set_header Host $http_host:8080),確保后端通過 request.getRequestURL()獲取完整URL,即可快速修復該問題。

如果您在使用若依框架過程中遇到類似問題或其他技術難題,歡迎在評論區留言反饋。我們建議您反饋時提供以下信息,以便更快定位和解決問題

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

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

相關文章

使用PyInstaller打包 Python 工程

引言:大模型是個好工具,盡管好多內容都是拼湊的,但是整理學到的就是自己的。因工作需要隱藏python源代碼,方法有PyInstaller 、Cpython等多種方法,PyInstaller更為常用,PyInstaller打包 Python 工程步驟整理如下: 一、確保系統環境準備就緒 安裝 Python 和 pip 確認版本…

Python 程序設計講義(1):PyCharm 安裝教程

Python 程序設計講義(1):PyCharm 安裝教程 一、安裝 Python 解釋器 1、下載 Python 安裝文件 點擊如下鏈接進入 Python 官網: https://www.python.org/ 在彈出的頁面中單擊【Downloads】,然后單擊下面的【Download Pyt…

uniapp云打包安卓

1、基礎云打包 2、修改logo3、怎么實現下拉菜單4、修改啟動頁啟動頁默認這樣 5、URL Scheme頁面跳轉

Python----NLP自然語言處理(英文分詞器--NLTK)

一、NLTK_介紹NLTK(Natural Language Toolkit,自然語言處理工具包),一個主要用于清洗和處理英文文本的Python工具包。它有很多的功能,我們主要使用的是它的分詞功能,之前講過中文分詞是比較復雜的&#xff…

傳統瀏覽器過時了?Dia如何用AI重新定義上網體驗

歡迎來到我的博客,代碼的世界里,每一行都是一個故事🎏:你只管努力,剩下的交給時間 🏠 :小破站 傳統瀏覽器過時了?Dia如何用AI重新定義上網體驗它是什么核心功能搜索編程左右互動感謝…

基于DTLC-AEC與DTLN的輕量級實時語音增強系統設計與實現

基于DTLC-AEC與DTLN的輕量級實時語音增強系統設計與實現 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。 1. 引言 在當今的互聯網通信時代,實時語音通信已成為人們日常生活中不可或缺的一部分。然而,語音通信質量常…

Attu-Milvus向量數據庫可視化工具

本文介紹了如何安裝可視化工具Attu,包括使用Docker鏡像啟動并訪問Attu服務。 目錄 前言 一、Attu安裝 1. Docker容器安裝 2. 桌面程序安裝 二、使用 Milvus Web U 前言 Attu是一款專為Milvus向量數據庫打造的開源數據庫管理工具,提供了便捷的圖形化…

高效檢測數據突變的MDAM算法詳解

在數據分析領域,我們經常需要檢測數據序列中的異常變化。今天給大家介紹一種簡單但非常有效的算法——MDAM (Mean Drift Accumulation Monitor),它能幫你輕松發現數據中的均值突變現象!1. 🔍 算法原理累計數均值突變檢測算法(MDAM…

記錄一道sql面試題3

題目:有一張表a,和一張表ba:id age name1 18 kethy2 32 kavin3 22 tonyb:id dept description2 sale today2 dev sunday提問:將a和b兩張表左連接查詢,條件是a.id b.id會得到什么結果。查詢的字段為a.*,b.* 。說明:左表 a 中 id1 …

linux系統------LVS+KeepAlived+Nginx高可用方案

目錄 一、環境搭建 1.環境準備 2.安裝ipvsadm 和 安裝 keepalived(Lvs服務器) 3.為兩臺RS配置虛擬ip(nginx服務器) 1.配置虛擬網絡子接口(回環接口) 2.修改內容如下: 3.配置ARP 二、KeepalivedLvsN…

【MySQL】性能優化實戰指南:釋放數據庫潛能的藝術

文章目錄MySQL性能優化實戰指南:釋放數據庫潛能的藝術🚀 引言為什么需要MySQL性能優化?📋 性能優化基礎知識MySQL性能瓶頸分析1. 硬件資源瓶頸2. MySQL內部瓶頸🏆 優化配置策略大全💾 內存配置優化InnoDB緩…

Unity 3D碰撞器

在Unity中,碰撞器(Collider)是用于檢測物體之間碰撞的組件,它們定義了物體的物理邊界。碰撞器與剛體(Rigidbody)配合使用,實現物理模擬。下面我將按您的要求,從碰撞器的種類、常用參…

Windows批處理實現帶時間戳ping

windows環境 , 將以下代碼保存為 .bat文件 echo off echo.---------------------------------------------------------- echo.----------------------------------------------------------- echo off set /p hostplease input your destination ip : set logfi…

GeoPandas 城市規劃:Python 空間數據初學者指南

安裝和設置 在深入研究數據之前,我們需要準備好工具。設置 GeoPandas 及其必要的依賴項是第一步。 我們將在 Google Colab 中完成此操作。 !pip install geopandas contextily matplotlib 空間數據有多種格式,但 GeoJSON 是常見且易于訪問的格式。Ge…

力扣面試150題--環形子數組的最大和

Day 80 題目描述思路 初次做法:在昨天代碼的基礎上修改 計算普通子數組的最大和 使用動態規劃計算以每個位置為起點的最大子數組和(存儲在 val 中),并更新全局最大值 rightmax。計算后綴和與前綴和 sum[i]:從位置 i 到…

python類Keys

類Keys的定義:Elass Keys (object): 程軒開Set of special keys codes.#n# 第 15 章 網絡爬蟲 合情些準出照地限公軹 esms0 pro 瘀 Δ器代芻奄燉慧 圖 15-39 工件肉業魚光得 國有上子 理人場營,有司;可有B 相關圍書 圖 15-40 頁源代碼 ython". 名可能不鞋 NUL…

svn如何設置忽略文件夾或者文件的提交

使用svn,每次提交代碼時,都會把java的編譯文件target,或者前端的node_modules,dist等不需要提交的目錄或這文件,列出來實現。通過配置svn,可以在提交代碼時,自動忽略這些不需要提交到倉庫的文件…

MonoGame 游戲開發框架日記 -06

第六章:動畫類以及動畫精靈 好久不見家人們好久沒更新MonoGame系列了,不是主包棄坑了,主要是主包最近忙著搞項目學科一找暑假工打,這不一閑下來就立刻馬不停蹄的來給大家更新了,今天的教程代碼部分比較多接下來我們正式…

LVS四種工作模式深度解析

LVS(linux virual server)LVS四種工作模式深度解析 LVS-NAT模式 四臺虛擬機 火墻關閉 關閉火墻 systemctl stop firewalldsystemctl disable firewalld關閉開機自啟火墻1.clienteth0 IP:172.25.254.1002.lvs eth0ip :172.25.254.200; eth1ip:…

[設計模式]C++單例模式的幾種寫法以及通用模板

之前在這篇文章中簡單的介紹了一下單例模式的作用和應用C中單例模式詳解_c單例模式的作用-CSDN博客,今天我將在在本文梳理單例模式從C98到C11及以后的演變過程,探討其不同實現方式的優劣,并介紹在現代C中的最佳實踐。 什么是單例模式&#x…