将 http 重定向到 https AWS 应用程序负载均衡器
Posted
技术标签:
【中文标题】将 http 重定向到 https AWS 应用程序负载均衡器【英文标题】:Redirect http to https AWS Application Load Balancer 【发布时间】:2020-08-21 22:18:18 【问题描述】:大家好,所以我将我的 ELB 配置为使用 SSL 证书,它工作得很好,但是,我仍然有一个问题,如果用户在 HTTP 下通过端口 80 访问我的网站,该网站不会将他们重定向到 HTTPS 安全联系。这是 Elastic Beanstalk 配置选项卡中我的 ELB 配置的屏幕截图。感谢您提供任何帮助。
【问题讨论】:
【参考方案1】:事实上,你已经不能再从弹性豆茎的界面中进行操作了 不要从应用程序中执行此操作,这是负载的不良解决方案。 您现在必须转到 EC2 负载均衡器并更改端口 80 的侦听器,如下所述:https://medium.com/@j_cunanan05/how-to-redirect-http-to-https-in-amazon-web-services-aws-elastic-beanstalk-67f309734e81
【讨论】:
【参考方案2】:您可以通过以下方式设置 Application Load Balancer 侦听器:
HTTP 80: default action
IF
Requests otherwise not routed
THEN
Redirect to HTTPS://#host:443/#path?#query
Status code:HTTP_301
【讨论】:
【参考方案3】:虽然您似乎可以通过在应用程序中进行重定向来使其正常工作,但 可以完全在 ALB 中执行此重定向。文档:https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html
此功能于 2018 年 7 月发布。https://aws.amazon.com/about-aws/whats-new/2018/07/elastic-load-balancing-announces-support-for-redirects-and-fixed-responses-for-application-load-balancer/
Elastic Beanstalk 可能尚未推出自己的支持来配置此功能。您或许可以通过 ebextensions 对其进行配置,但目前最好只在您的应用程序中进行配置。
【讨论】:
【参考方案4】:这根本不是 elb,我只需添加以下代码:
if (process.env.NODE_ENV === "production" || process.env.NODE_ENV === "awsDevelopmentServer")
app.use(function(req, res, next)
// Insecure request?
if (req.get("x-forwarded-proto") == "http")
// Redirect to https://
return res.redirect("https://" + req.get("host") + req.url);
```
【讨论】:
看起来这种形式是亚马逊的最佳实践:aws.amazon.com/premiumsupport/knowledge-center/…以上是关于将 http 重定向到 https AWS 应用程序负载均衡器的主要内容,如果未能解决你的问题,请参考以下文章
使用 tomcat 服务器和 aws 负载均衡器将 http 请求重定向到 https
在 Spring Boot 应用程序中为 AWS Beanstalk 的 nginx 设置 HTTP 到 HTTPS 重定向
Python3 + Nginx:将 HTTP 流量重定向到 AWS Elastic Beanstalk 上的 HTTPS
AWS S3 不会将 https://www.example.com 重定向到 https://example.com,但会重定向 http://www.example.com