SpringBoot+Nginx+Https下redirect问题

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

问题描述

项目采用springboot框架,内嵌tomcat容器。前端采用nginx反向代理,当部署了https以后出现的重定向(redirect)的问题。用nginx反向代理tomcat,然后把nginx配置为https访问,并且nginx与tomcat之间配置为普通的http协议,当后台代码定义时redirect,实际是重定向到了http下的地址,导致浏览器上无法访问非https的地址。

解决方案

配置nginx

由于对tomcat而言收到的是普通的http请求,因此当tomcat里的应用发生转向请求时将转向为http而非https,为此我们需要告诉tomcat已被https代理,方法是增加X-Forwared-Proto和X-Forwarded-Port两个HTTP头信息。

server {
    listen 80;
    listen 443 ssl;
    server_name localhost;
    ssl_certificate server.crt;
    ssl_certificate_key server.key;
    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
    }
}

配置tomcat

springboot配置参见Spring Boot Reference Guide-Use behind a front-end proxy server

基于spring-boot开发时只需在application.properties中进行配置。
该配置将指示tomcat从HTTP头信息中去获取协议信息(而非从HttpServletRequest中获取

server.tomcat.remote_ip_header=x-forwarded-for
server.tomcat.protocol_header=x-forwarded-proto
server.tomcat.port-header=X-Forwarded-Port
server.use-forward-headers=true

以下是经常被漏掉的配置,本人一开始就忘记配置导致不成功。因为我的nginx的机器IP不在默认允许IP列表里

Tomcat is also configured with a default regular expression that matches internal proxies that are to be trusted. By default, IP addresses in 10/8, 192.168/16, 169.254/16 and 127/8 are trusted. You can customize the valve’s configuration by adding an entry to application.properties, e.g.

server.tomcat.internal-proxies=192\\.168\\.\\d{1,3}\\.\\d{1,3}

此外,虽然我们的tomcat被nginx反向代理了,但仍可访问到其8080端口。为此可在application.properties中增加一行:

server.address=127.0.0.1

这样一来其8080端口就只能被本机访问了,其它机器访问不到。

Ubuntu 20.04 Jenkins生产级部署:deb包+systemd+Nginx全栈实践 Jenkins 是持续集成与交付(CI/CD)的核心调度平台,其本质是基于 Java 的可扩展自动化服务引擎。工作原理依赖 JVM 运行时、插件化架构与分布式任务调度机制,技术价值在于将构建、测试、部署等工程活动标准化、可观测、可编排。典型应用场景包括 Java/Python 项目自动编译、Docker 镜像构建、Kubernetes 应用发布及多环境流水线协同。在 Ubuntu 20.04 系统中,因官方源版本陈旧(如 2.204.x)、OpenJDK 11 兼容性风险及 systemd 服务治理需求,必 阅读详情

相关推荐

SpringBoot+Vue前后端分离实战:火车票订票系统全栈开发与并发处理

前后端分离架构已成为现代Web开发的主流模式,它将后端业务逻辑与前端交互彻底解耦,大幅提升开发效率与系统可维护性。SpringBoot作为Java后端事实标准,通过内嵌容器与自动化配置简化了接口开发;Vue则凭借渐进的组件化设计降低了前端门槛。在真实业务场景中,接口鉴权、跨域请求、并发扣库存等问题是每个开发者绕不开的挑战。JWT无状态鉴权保障了分布式环境下的安全访问,数据库原子更新与行锁机制则有效防止超卖现象。Nginx反向代理与静态资源服务的配置,更是前后端联调与生产部署的关键环节。本文以火车票订票系统为

weixin_34198453的博客 426

Springboot redirect重定向传递参数

⏹RedirecAtrributes ⏹FlashMap ⏹DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE ⏹RequestContextUtils.getOutputFlashMap ⏹FlashMapManager

菜鸟记录 9121

DSP 6678处理器Cache配置实战:从基础设置到多核一致性优化

本文深入探讨了TI TMS320C6678多核DSP处理器的Cache配置与优化实战。文章从基础概念入手,详细解析了L1、L2 Cache的模式选择与内存属性配置,并重点剖析了多核环境下缺乏硬件一致性支持带来的挑战。核心部分提供了基于Writeback和Invalidate操作的手动一致性维护策略,以及针对数据流处理、频繁访问共享数据等不同场景的性能调优与避坑指南,帮助开发者构建高效稳定的多核DSP系统。

o5p6q的博客 163

SpringBoot 重定向

重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

qq_22074337的博客 2万+

springboot 重定向、转发

springboot 重定向、转发。跳转指定页面

global_coding的博客 2610

redirect跳转https变为http问题的深入思考

背景 服务部署以及跳转展示如下: 用户https请求通过阿里云负载通过http到指定应用,应用返回跳转路径(状态为302),但跳转路径为http(不为https),所以访问不了 2.1 跳转伪代码: // ModelAndView mv.setViewName(WebCst.REDIRECT + "/admin/sso/login"); 2.2 浏览器跳转截图 跳转的Location是如何生成的 后台是以springboot进行开发的,下面的分析都是基于springboot方式进行

snail-jie的博客 1万+

https redirect 为 http 的解决方式

问题描述 网站是https的,但是使用了HttpServletResponse.sendRedirect的方法,使相对路径的地址跳转到了http网址(80端口),而不是https(443端口)。 导致了很多问题,例如(用户一次请求,结果多次才能访问上,影响体验、http被访问,其实不被希望、被安全的浏览器认为你在反复重定向,直接kill你的请求!) 看了一些博客,下面是总结的解决方案 解决方案...

疯狂小草的博客 1万+

SpringBoot+Nginx Httpsredirect问题

最近集群部署项目时遇到了这个问题,项目采用springboot框架,内嵌tomcat容器。前端采用nginx使用https以后出现的重定向(redirect)的问题。用nginx反向代理tomcat,然后把nginx配置为https访问,并且nginxtomcat之间配置为普通的http协议,当后台代码定义时redirect,实际是重定向到了http下的地址,导致浏览器上无法访问...

wittdong的博客 3321

springboot 项目 使用 nginx 代理 https 重定向 http 无法访问

问题: 描述:一个springboot的http项目,公司使用nginx配置了ssl证书通过https访问,但是后台代码使用了redirect重定向,结果response返回都是http无法访问。 先贴一下nginx的配置 server { listen 8080 ssl; server_name 127.0.0.1; ...

itxiaobaishu的博客 3626

java 重定向 https_springboot重定向后,https变成http

问题描述:springboot内部使用重定向redirect,https变成http解决方案1、nginx配置proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header ...

weixin_33585909的博客 2671

反向代理HttpsTomcat使用http的问题

反向代理HttpsTomcat使用http的问题...

kinginblue的专栏 3974

https部署

准备证书及秘钥 方式一、springboot项目可直接在yml中配置   1、需要将证书转换成jks或p12格式,如   多个crt证书转为pem:    cat xxx.crt xxx2.crt xxx3.xrt xxx4.crt > server.pem   pem证书转为jks:    //PEM--->PFX   openssl pkcs12 ...

weixin_30521161的博客 190

配置https环境访问minio完整过程

配置minio的https访问笔记

wwy0663的博客 2574

nginx ssl反向代理springboot站点,重定向时协议变为http问题解决

nginx ssl反向代理springboot站点,重定向时协议变为http问题解决

路过君的博客 936

SpringBoot重定向底层原理与数据传递:从302到FlashMap的工程实践

HTTP重定向是Web开发中最基础也最容易被忽视的机制,其本质是服务端返回302状态码与Location头,由浏览器再次发起一个新请求。理解“两次独立请求”这一事实,是掌握SpringBoot重定向、避免参数丢失与数据混乱的关键。在SpringBoot工程中,redirect:/路径、RedirectView、ResponseEntity等实现方式各自适用不同场景;要实现Post/Redirect/Get模式,则需借助RedirectAttributes与FlashMap在session中临时存放提示数据。

weixin_34258838的博客 369

Spring Boot应用从本地到公网部署全流程实战:Nginx、Docker与HTTPS配置

在软件开发和部署领域,环境隔离与网络可达性是构建可公开访问服务的核心挑战。其基本原理在于通过反向代理和容器化技术,将运行在本地开发环境的应用安全地暴露至公网。这项技术的核心价值在于打通了开发与生产环境的壁垒,使得应用演示、多端联调及与第三方服务集成成为可能。典型的应用场景包括个人项目展示、移动端API服务部署以及需要公网回调的OAuth登录、支付等系统。本文以Spring Boot应用为例,结合Nginx反向代理和Docker容器化,详细演示了如何解决网络配置、安全暴露等关键问题,实现从localhost到

weixin_30765577的博客 393

Nginx配置转发Spring boottomcat ,后端拿不到客户端请求实际协议、端口问题

Nginx配置转发Spring boottomcat ,后端拿不到客户端请求实际协议、端口问题

fanggeyan的博客 835

基于SpringBoot+Vue的足球社区管理系统开发实战

前后端分离是现代Web开发的主流架构,后端通过接口提供数据,前端负责页面渲染与交互。SpringBoot作为Java生态中快速构建服务的框架,Vue作为渐进式前端框架,结合MyBatis与MySQL,构成了一套成熟稳定、开发效率高的技术栈。本文以足球社区管理系统为例,详解从数据库设计、后端接口开发到前端页面实现与部署上线的完整流程,涵盖核心表结构设计、动态SQL应用、JWT认证、跨域处理、Nginx部署等实践要点,帮助开发者理解前后端分离项目从零到一的工程化落地方法与常见坑点。

weixin_34293141的博客 266

SpringBoot与Vue前后端分离架构下Keycloak SAML2.0 SSO集成实战

本文详细介绍了在SpringBoot与Vue前后端分离架构中集成Keycloak SAML2.0 SSO的实战步骤。通过Keycloak的开源身份认证解决方案,结合SAML2.0协议,实现企业级单点登录功能,提升系统安全性和用户体验。内容包括环境配置、SpringBoot后端集成、Vue前端实现及常见问题排查,为开发者提供了一套完整的SSO集成方案。

weixin_34416754的博客 337

SpringBoot3+Vue3+微信小程序医院预约挂号系统开发实战

前后端分离架构是现代Web应用开发的核心模式,通过将前端展示层与后端业务逻辑解耦,实现了技术栈的灵活选择和团队的高效协作。其技术原理基于RESTful API规范,前端通过HTTP请求与后端进行数据交互,后端专注于业务处理和数据库操作。这种架构的价值在于提升开发效率、便于维护扩展,并能支持多终端适配。在医疗信息化领域,前后端分离技术结合SpringBoot、Vue等主流框架,能够快速构建医院预约挂号等业务系统。基于Redis的分布式缓存和JWT认证机制确保了系统的高并发处理能力和安全性,为中小型医疗机构提供

weixin_33843947的博客 399
上一篇: Netty连接池ChannelPool,FixedChannelPool应用
yucharlie
博客等级 码龄9年 4粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值