4

我已将负载均衡器配置为将请求路由到两个运行 NodeJs 服务器的 Ec2 实例。我需要将来自 http(端口 80)和 https(端口 443)的请求定向到 NodeJs 中 EC2 实例的 http(端口 80)。我已将 ssl 证书上传到 AWS,并将负载均衡器配置为使用 ssl 证书。问题是来自 http 端口的请求不会自动路由到 https。它必须是服务器端脚本或剪辑,我需要在 server.js 中编写它应该将 http 路由到 https,我试图这样做,但它遇到了无休止的重定向。所以问题-

  • AWS 是否有任何指南可以做到这一点?
  • 如果不是那么如何实现这一点,任何指针或建议将不胜感激。
4

4 回答 4

0

将您的 ELB 放在 Cloudfront 后面,并在您的分发设置中选择将 HTTP 转发到 HTTPS。 在此处输入图像描述 以下文档将很有帮助 https://docs.aws.amazon.com/waf/latest/developerguide/tutorials-ddos-cross-service-ELB.html

这种方法有两个好处:

1-您的问题将得到解决

2-您可以使用强大的 CDN 的优势,有关 Cloudfront 的更多信息,请阅读https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html

更新:

您可以通过编辑ELB 中 的Listeners设置将流量从 HTTP 转发到 HTTPS。在此处输入图像描述

于 2018-07-26T08:17:59.137 回答
0

如果您使用的是 AWS ALB(应用程序负载均衡器),他们今天宣布了 http->https 重定向。看看:https ://exampleloadbalancer.com/redirect_demo.html

于 2018-07-26T01:50:40.380 回答
0

我找不到来自 AWS 的指南,但如果我找到它,我会继续搜索并更新答案。

通常,当您在 Node.js 中编写应用程序时,您会指定应用程序应在哪个端口上运行。这意味着您将需要两个不同的服务器进行监听。当您的应用程序在端口 80 (HTTP) 上收到请求时,它应该重定向到您的 HTTPS 服务器,就像在这个答案中一样。

可能与您的问题相关的另一点是,在生产环境中,您通常不会将端口绑定到 Node.js 服务器,因为它还没有准备好生产。您可能想要使用反向代理和负载均衡器,例如 Nginx 或 HAProxy。

于 2018-07-25T16:45:48.307 回答
0

在服务器端,您可以检查X-Forwarded-Proto (原始请求协议),如果它的值很大,http您可以将重定向(http 302)发送到使用 https 协议的 url。

尽管使用 ALB(应用程序负载均衡器,您可以指定一组规则,也许可以在那里做到这一点..)

于 2018-07-25T16:42:34.347 回答