【问题标题】:AWS Loadbalancer Proxy for Nodejs适用于 Nodejs 的 AWS 负载均衡器代理
【发布时间】:2019-01-02 12:49:20
【问题描述】:

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

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

【问题讨论】:

  • 你在使用nginx吗?
  • 不,我没有使用 nginx。
  • 嗯...我相信它只是您需要的 AWS 配置。我很久以前做过。
  • 如果是 http 而不是 https,您应该只重定向到 https。也许只是调整你的 server.js

标签: node.js amazon-web-services amazon-ec2 elastic-load-balancer aws-load-balancer


【解决方案1】:

在服务器端你可以查看X-Forwarded-Proto (原始请求协议),如果它的价值http 你可以将重定向(http 302)发送到带有 https 协议的 url..

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        将您的 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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-18
          • 1970-01-01
          • 2017-11-05
          • 2018-04-14
          • 2017-07-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多