请求重定向后,端口自动去掉的问题

遇到的问题如下:

html 复制代码
nginx代理端口 1443 -> 9001

访问: localhost:9001/index.html

会重定向到 localhost:9001/login.html 没问题,因为没有登录。

但是访问: localhost:1443/index.html

会重定向到 localhost/login.html

这个重定向的端口不见了。为什么呢?

经过修改Nginx配置,始终无效,验证发现是后端Java程序在生成重定向URL时没有考虑到前端代理的端口(springboot默认)。

Java应用程序在处理重定向时通常会基于请求头信息生成重定向URL。

如果Nginx代理没有正确传递或修改这些请求头,后端应用程序生成的URL可能会不包含端口号。

解决办法如下:

Nginx配置:

html 复制代码
server {
    listen 1443;

    location / {
        proxy_pass http://localhost:9001;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Spring配置:

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.ForwardedHeaderFilter;

@Configuration
public class WebConfig {
    @Bean
    public ForwardedHeaderFilter forwardedHeaderFilter() {
        return new ForwardedHeaderFilter();
    }
}

通过使用ForwardedHeaderFilter,Spring会自动处理X-Forwarded-*头信息,生成正确的重定向URL。

总结

如果Nginx配置无法解决端口丢失的问题,检查和修改后端Java程序的重定向逻辑,以确保生成的URL包含正确的端口号。这可以通过手动构建URL、使用X-Forwarded-*头信息或使用Spring的ForwardedHeaderFilter来实现。

相关推荐
汉堡大王95275 小时前
面试官:讲讲归并排序 —— 为什么它能在面试里反复出现?
前端·javascript·面试
kyriewen5 小时前
别再只给人写页面了:AI 已经开始自己点你的按钮、填你的表单
前端·javascript·人工智能
天天喝旺仔5 小时前
Vue 3 组合式 API:从 Options 迁移到 script setup
前端·javascript·vue.js
zww89491115 小时前
家政多商户系统开发:从架构设计到落地实践
java·eclipse
知了清语5 小时前
以测试为盾,重构为矛——老旧前端系统迭代中的“测试先行”实践总结
前端
cuijiecheng20185 小时前
从 GinormoTime 到 Rocky Linux:25fps LTC 完整搭建与验证实战
linux·运维·服务器
snow@li5 小时前
Java:微服务项目与单体项目区别、市场占有率全景深度分析
java·开发语言·微服务
还是大剑师兰特6 小时前
Maven‑3.9.16 Windows 下载+安装+环境变量完整教程
java·windows·maven
攀小黑6 小时前
vue3+Web Speech API 封装了一个弹窗语音输入
前端·macos·xcode
roamingcode6 小时前
4.5 小时,从一句话需求到可安装的 Chrome 插件:一次 AI 结对开发的完整复盘
前端·人工智能·chrome·claude·codex