目录

  • 一 、问题描述
  • 二、问题现象
  • 三、问题根本原因
    • 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…