将 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

没有 index.php 的 AWS ELB 将 HTTP 重定向到 HTTPS

使用 AWS Elastic Beanstalk 重定向到 https 不起作用