- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经通过 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/
我是一名优秀的程序员,十分优秀!