Spring Boot redirect Http 与 Nginx Https 问题

前言

我们有个项目使用 Spring Boot 开发, 使用 Nginx 做反向代理并配置了 SSL,但是后端重定向一直重定向 Http 协议而非 Https 协议,导致网页无法打开。

解决方案

原因是用 Ninx 反向代理 Tomcat,然后把 Nginx 配置为 Https 访问,并且 Nginx 与 Tomcat 之间配置为普通的 Http 协议,当后台代码定义时 redirect,实际是重定向到了 Http 下的地址,导致浏览器上无法访问非 Https 的地址。

由于对 Tomcat 而言收到的是普通的 Http 请求,因此当 Tomcat 里的应用发生转向请求时将转向为 Http 而非 Https,为此我们需要告诉 Tomcat 已被 Https 代理,方法是增加 X-Forwared-Proto

  • 在 Nginx 中添加配置

    1
    proxy_set_header X-Forwarded-Proto $scheme;

    比如

    1
    2
    3
    4
    location /api/ {
    proxy_pass http://server;
    proxy_set_header X-Forwarded-Proto $scheme;
    }
  • 在 application.properties 添加配置

    1
    2
    server.use-forward-headers=true
    server.tomcat.protocol-header=X-Forwarded-Proto

当然还有其他方法,比如 Tomcat 重定向 Https 请求变为 Http。其实和这个大同小异,但需要修改源码,详见tomcat重定向https请求变为http

参考

Powered by Hexo and Hexo-theme-hiker

Copyright © 2018 - 2023 Leamx's Blog All Rights Reserved.

UV : | PV :