Spring Boot & ELB - 如何让负载均衡器将 http 重定向到 https?

标签 spring amazon-web-services spring-boot amazon-elastic-beanstalk

我已经通过 Elastic Beanstalk 部署了一个 Spring Boot 应用程序。我正在使用负载均衡器,所以这是流程(据我所知):

互联网/浏览器请求 ---HTTPS---> 负载均衡器 ---HTTP---> Spring Boot 应用服务器

所以本质上,SSL 在负载均衡器处终止,应用服务器只处理普通的旧 HTTP。

但是在来自浏览器的 HTTP 请求的情况下,我希望负载平衡器自动重定向到 HTTPS。

这个问题有几个问题:

Spring Boot with Embedded Tomcat behind AWS ELB - HTTPS redirect
How to redirect automatically to https with Spring Boot
Spring Boot redirect HTTP to HTTPS

但是这些问题的答案对我来说都没有意义。也许我误解了,但所有的答案基本上都使 Spring Boot 应用程序仅服务器 HTTPS 请求(例如使用 http.requiresChannel().anyRequest().requiresSecure() 时)。

但是,这与流程背道而驰,因为我完全同意 SSL 在负载均衡器处终止,而 Spring Boot 应用服务器仅处理 HTTP。因此,如果我在 spring boot 级别需要 SSL,那么我将需要进行端到端 SSL 连接,这对我的应用程序来说并不是真正需要的。

我还使用了以下属性,它们似乎也无济于事:

server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.protocol-header=x-forwarded-proto  

最佳答案

借助这个article ,我终于能够弄清楚如何在 ELB 环境中为 Spring Boot 应用程序执行此操作。

我必须在 src/main/webapp/.ebextensions/nginx/conf.d 中创建一个 conf 文件。我只是将其命名为 myconf.conf。

myconf.conf 中,我将这段代码放在:

server {
    listen  80;
    server_name www.my-site.com;
    if ($http_x_forwarded_proto != "https") {
        rewrite ^(.*)$ https://$server_name$REQUEST_URI permanent;
    }
}

此外,请确保 HTTP 和 HTTPS 监听器均已为负载均衡器打开。
此外,我的 spring boot 应用程序只打开 HTTP,因为负载均衡器已经终止了 SSL。

关于Spring Boot & ELB - 如何让负载均衡器将 http 重定向到 https?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47982175/

相关文章:

mysql - Docker MySQL - 无法从 Spring Boot 应用程序连接到 MySQL 数据库

amazon-web-services - 如何为s3触发事件添加过滤值

java - 在构建 jar 并运行该 jar 时,外部依赖包的 @ComponentScan 在 2.1.x 中不起作用

java - 将响应映射到 Java 中的类

java - 我必须在哪里编码模型? (Spring MVC 模板项目)

node.js - 浏览器返回 403 访问错误,可能由 AWS 引起

amazon-web-services - 如何将主堆栈模板的重复组件用于子堆栈模板中的多个参数?

java - 如何使用HikariPool连接Snowflake-SpringBoot、Gradle

spring - 试图在 hadoop 集群上运行 spring boot 嵌入式 web 容器

java - 如何使用 thymeleaf 获取变量值