Node.js 用于Nodejs的AWS负载平衡器代理

Node.js 用于Nodejs的AWS负载平衡器代理,node.js,amazon-web-services,amazon-ec2,elastic-load-balancer,aws-load-balancer,Node.js,Amazon Web Services,Amazon Ec2,Elastic Load Balancer,Aws Load Balancer,我已经将负载平衡器配置为将请求路由到两个运行NodeJs服务器的Ec2实例。我需要将来自http(端口80)和https(端口443)的请求定向到NodeJs中EC2实例的http(端口80)。我已将ssl证书上载到AWS,并将负载平衡器配置为使用ssl证书。问题是来自http端口的请求不会自动路由到https。它必须是一个服务器端脚本或剪断,我需要在server.js中编写,它应该将http路由到https,我尝试过这样做,但它遇到了无休止的重定向。那么问题呢- AWS是否提供了相关指南 如

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

  • AWS是否提供了相关指南
  • 如果没有那么一个人可以实现这一点,任何指针或建议将不胜感激
在服务器端,您可以检查
X-Forwarded-Proto
(原始请求协议)并且如果它的值为
http
,则可以使用https协议将重定向(http 302)发送到url


虽然使用ALB(应用程序负载平衡器,您可以指定一组规则,也许可以在那里指定。)

我无法从AWS中找到指南,但我将继续搜索并在找到答案时更新答案

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


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

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

将您的ELB放在Cloudfront后面,并在分发版的设置中选择forward HTTP to HTTPS。 下面的文档将很有帮助

这种方法有两个好处:

你的问题会解决的

2-您可以利用功能强大的CDN的优势,了解有关Cloudfront read的更多信息

更新:

通过编辑ELB中的侦听器设置,可以将流量从HTTP转发到HTTPS。

您是否正在使用
nginx
?不,我没有使用nginx.Hmm…我相信这正是AWS中您需要的配置。我很久以前就这么做了。如果是http而不是https,你应该只重定向到https。也许只是调整一下你的server.js