我已经配置了负载均衡器,以将请求路由到两个运行NodeJs服务器的Ec2实例。我需要将来自http(端口80)和https(端口443)的请求定向到NodeJs中EC2实例的http(端口80)。我已将ssl证书上传到AWS并配置了负载均衡器以使用ssl证书。问题是来自http端口的请求不会自动路由到https。它必须是服务器端脚本或要删除的脚本,我需要在server.js中编写,该脚本应该将http路由到https,我尝试这样做,并且遇到了无尽的重定向。那么问题-
答案 0 :(得分:0)
在服务器端,您可以检查X-Forwarded-Proto
(原始请求协议),如果它的值为http
,则可以使用https协议将重定向(http 302)发送到url。
尽管使用ALB(应用程序负载平衡器,您可以指定一组规则,但也可以在其中进行设置。)
答案 1 :(得分:0)
我无法从AWS上找到指南,但在找到答案的情况下,我将继续搜索并更新答案。
通常,当您在Node.js中编写应用程序时,您可以指定应用程序应在哪个端口上运行。这意味着您将需要两个不同的服务器进行监听。并且当您的应用在端口80(HTTP)上收到请求时,它应重定向到您的HTTPS服务器,就像在this答案中一样。
与您的问题可能相关的另一点是,在生产环境中,通常不将端口绑定到Node.js服务器,因为该端口尚未投入生产。您可能想要使用反向代理和负载平衡器,例如Nginx或HAProxy。
答案 2 :(得分:0)
如果您正在使用AWS ALB(应用程序负载平衡器),他们今天宣布了http-> https重定向。看看:https://exampleloadbalancer.com/redirect_demo.html
答案 3 :(得分: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
更新: