当前位置: 首页 > news >正文

Spring MVC 页面重定向返回后通过nginx代理 丢失端口号问题处理

Spring MVC页面重定向通过Nginx代理后出现端口丢失问题,通常由以下原因及解决方案构成:

#‌# 一、Nginx配置问题(核心原因)‌
‌1. Host头传递不完整‌
Nginx默认未将原始请求的端口信息传递给后端,导致应用生成重定向URL时缺少端口。需在Nginx配置中添加以下指令:

proxy_set_header Host $host:$server_port;  # 将Host头设置为原始请求的完整域名和端口‌:ml-citation{ref="1,6" data="citationList"}

2‌. 关闭绝对路径重定向‌
Nginx默认使用绝对路径重定向(如http://host/path/),导致端口丢失。可通过以下配置禁用:

absolute_redirect off;  # 禁用绝对路径重定向,保留原始请求的端口‌:ml-citation{ref="2,5" data="citationList"}

#‌# ‌二、后端应用适配代理环境‌
‌1. 配置X-Forwarded头识别‌
确保后端应用能正确识别Nginx转发的X-Forwarded-*头信息。例如,在Spring Boot中需添加配置:

server.use-forward-headers=true  # 启用对X-Forwarded头信息的解析‌:ml-citation{ref="1,7" data="citationList"}

2‌. Tomcat容器适配(如适用)‌
若使用Tomcat,需在server.xml中配置RemoteIpValve以处理代理头:

<Valve className="org.apache.catalina.valves.RemoteIpValve" 
       protocolHeader="X-Forwarded-Proto" 
       portHeader="X-Forwarded-Port"/>  # 解析代理传递的端口信息‌:ml-citation{ref="7" data="citationList"}

#‌# ‌三、其他注意事项‌

  • 清理浏览器缓存‌:部分重定向可能被浏览器缓存,需清理后测试‌2。
  • 统一代理端口映射‌:确保Nginx监听的端口(如1443)与后端服务端口(如9001)在配置中一致,避免因端口映射混乱导致问题‌15。‌
  • 避免冗余配置‌:部分场景中重复设置proxy_set_header可能导致冲突,建议精简配置仅保留必要指令‌78。
    ‌完整Nginx配置示例‌
server {
    listen 1443;
    server_name localhost;
    
    location / {
        proxy_pass http://localhost:9001;
        proxy_set_header Host $host:$server_port;  # 传递完整Host头‌:ml-citation{ref="1,6" data="citationList"}
        proxy_set_header X-Forwarded-Host $host:$server_port;  # 显式传递端口‌:ml-citation{ref="5" data="citationList"}
        proxy_set_header X-Forwarded-Port $server_port;  # 传递端口给后端‌:ml-citation{ref="7" data="citationList"}
        absolute_redirect off;  # 禁用绝对路径重定向‌:ml-citation{ref="2,5" data="citationList"}
    }
}
http://www.dtcms.com/a/54060.html

相关文章:

  • 分布式锁—5.Redisson的读写锁二
  • C语言中数据的存储
  • AI进化太快,建立完善的AI理论迫在眉睫
  • 【嵌入式通信协议】串口的详细介绍
  • 数据库与存储优化
  • [Computer Vision]实验八:图像分割
  • RxJS与Redux革命性协同:打造高效、解耦的前端状态管理方案
  • Lab 3 Page Table
  • Linux系统基于ARM平台的LVGL移植
  • 深度学习语义分割数据集全景解析
  • 物理机、虚拟机、容器化怎么选择?
  • JT1078和GB28181差别在哪里?
  • C++(初阶)(二)——类和对象
  • 文件 IO
  • 豆包大模型 MarsCode AI 刷题专栏 001
  • Kotlin协程(六)Flow流
  • 掌握高效大模型任务流搭建术(二):链式流程如何赋能 AI 处理能力提升
  • Chapter 1 Introduction
  • qt open3dAlpha重建
  • proto3语法
  • 修改git fetch后引用没更新
  • 1493. 删掉一个元素以后全为 1 的最长子数组
  • Redis - 核心原理深度解析:线程模型、持久化与高可用性
  • TensorFlow深度学习实战(10)——迁移学习详解
  • Swagger UI界面的使用
  • 系统架构设计师教材:数据库设计基础知识
  • 从零开始的 Kafka 学习(二)| 集群启动
  • 深入解析 Umi-OCR:高效的免费开源 OCR 文字识别工具
  • OpenCV计算摄影学(15)无缝克隆(Seamless Cloning)调整图像颜色的函数colorChange()
  • Spring实战spring-ai运行