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

遇到的问题如下:

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来实现。

相关推荐
满栀5853 分钟前
vue3动态路由详细效果
前端·javascript·vue.js·typescript·前端框架
使用小功能大师5 分钟前
从零搭建高可用Web应用:全栈架构实战与成本优化完全指南
前端·阿里云·架构·服务搭建
琥珀色糖12 分钟前
Linux makefile
linux·运维·服务器·makefile·make
IT_陈寒17 分钟前
SpringBoot这个特性差点让我加班到凌晨
前端·人工智能·后端
2401_8949155318 分钟前
Geo 优化源码部署避坑指南:解决访问异常、定位失效、收录卡顿问题
java·服务器·后端·缓存·开源
whyutianict_vv19 分钟前
HCIE-Storage存储3.0排错题实战:归因框架与排查命令
linux·服务器·网络
Dovis(誓平步青云)19 分钟前
《 固井工程软件 Cemsol 的数据管理与国产化适配实践》
android·java·开发语言·人工智能
qq_2676128919 分钟前
Gitee DevOps的度量驱动持续改进:从构建数据到交付效率的量化管理与优化路径
前端·gitee·自动化
大模型码小白21 分钟前
AI安全前沿:AI大模型安全防护的前沿技术
java·网络·人工智能·python·深度学习·学习·安全
meilindehuzi_a23 分钟前
从 Vite 到 Axios 与 Mock:React Todos 全栈项目架构及请求链路详解
前端·react.js·架构