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

遇到的问题如下:

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

相关推荐
webkubor16 分钟前
一次前端生产白屏复盘:旧 HTML、Hash 资源和 MIME type text/html
前端·前端工程化
咩咩啃树皮33 分钟前
第63篇【终极整合巨作】从零手写原生中后台管理系统|整合62篇全部前端知识点|从头到尾完整架构+全功能逻辑
前端·架构
jjjava2.041 分钟前
MyBatis动态if/trim/where/set标签详解
java·开发语言·数据库
IT小盘1 小时前
17-构建Prompt测试集-提示词优化不再凭感觉
服务器·windows·prompt
gugucoding1 小时前
34.【Java】I/O流(下):NIO与文件操作
java·python·nio
tianyu2341 小时前
双指针循环匹配金额——打款记录与账单的自动对账算法
java·算法·双指针循环·匹配金额
YDS8291 小时前
大营销平台 —— 架构解析和抽奖流程串联
java·springboot·ddd
2401_858286111 小时前
OS81.【Linux】基于环形队列的多生产者-多消费者模型
linux·运维·服务器·环形队列
小贤plus1 小时前
MyBatis‑Plus IPage 分页踩坑实战:分页与全量查询兼容方案
java
Java内核笔记1 小时前
BeanRegistrar:Spring Boot 4 最被低估的新特性,彻底改变 Bean 注册方式
java·后端