【问题标题】:How to setup SSL for instance inside the ELB and communicating with a node instance outside the ELB如何在 ELB 内部设置 SSL 并与 ELB 外部的节点实例通信
【发布时间】:2018-01-26 18:51:22
【问题描述】:

我通过使用 ELB、自动缩放、RDS 和 ELB 外部的一个节点 ec2 实例在 AWS 上创建了一个架构(希望它不会出错)。现在我不知道如何在这个架构上实现 SSL。

让我简单解释一下:

  1. 我创建了一个 Classic Load Balancer。
  2. 在自动缩放组上创建。
  3. 将实例分配给自动扩缩组。
  4. 最后,我创建了一个用于节点的实例,它位于负载均衡器和自动缩放组之外。

现在,当我对负载均衡器实施 SSL 后,内部实例正在与 HTTP 请求上的节点实例通信,并且由于节点实例位于负载均衡器之外,因此请求被阻止。

谁能帮我实现这个架构的 SSL。

抱歉,如果您对我的架构感到困惑,如果还有其他最好的架构可能,请告诉我,我可以更改我的架构。

谢谢,

【问题讨论】:

  • 您在 Autoscaling 组/ELB 之外的 EC2 是否用于托管静态节点代码?
  • 是的,它拥有静态节点编码
  • 我建议使用 S3 存储桶来托管该静态内容。使用 CloudFront 并将该 S3 存储桶设置为源。您来自其他实例的请求可能会到达 CloudFront 分配,该分配也会处理 SSL。
  • 其实不是只有一个文件,所以不能在S3上移动
  • 我认为您需要打开安全组以允许这些实例之间的访问 - 根据我在下面的回答。也就是说,您可以使用任意数量的文件移动到 S3。您只需像在文件系统中构建网站一样构建它们。正如其他人所说,您也可以在此配置中设置 SSL。这可能是最有效/成本最低的方式。

标签: node.js amazon-web-services ssl amazon-ec2 amazon-elb


【解决方案1】:

如果您有静态内容,最好的办法是从 Cloudfront 使用 S3 存储桶作为其来源。

关于SSL,您可以在ELB级别设置SSL,关注the documentation

您的 ELB 侦听两个端口:80443,并仅使用开放端口 80 与您的 ASG 实例通信。 因此,当安全请求到达 ELB 时,它会将它们转发到您的服务器(ASG 中的 EC2)。然后,您的服务器,监听端口 80,接收请求;如果请求具有 X-FORWARDED-PROTO HTTPS,则服务器不执行任何操作,否则将设置它并将 URL 转发/重写为安全的 URL,然后进程重新启动。

我希望这会有所帮助并小心 ERR_TOO_MANY_REDIRECTS

【讨论】:

  • 我已经在 ELB 上尝试过 SSL。请再次阅读问题。我的问题是我有一个节点实例(ec2,即实例 1)和两个前端实例(ec2 服务 php 和 reactjs,即实例 2 和实例 3)。现在我的实例 2 和实例 3 在 elb 中(这有 SSL),而实例 1(节点 ec2)在它之外。因此,当实例 2 和实例 3 尝试与实例 1 进行通信时,我遇到了问题。
  • 您能具体说明一下您所说的交流是什么意思吗?日志中有什么有用的错误吗?
【解决方案2】:

您是否考虑过使用Application Load Balancer 与两个target groups 和一个listener rule

如果单个 EC2 实例只是托管静态内容,并且在公共路径上提供内容(例如 /static),那么所有东西都可以放在共享负载均衡器后面,使用一个公共证书,您可以使用 ACM 配置该证书.

【讨论】:

    【解决方案3】:

    "因为节点实例在负载均衡器之外所以请求 被屏蔽了。”

    如果它们在同一个 VPC 中,您应该检查您分配给实例的安全组。具体来说,您将希望允许从分配给负载均衡器实例的安全组访问进入独立实例上的端口 443 和/或 80 的连接 - 我们称之为“sg-load_balancer”(检查您的 AWS 控制台以查看实际的安全组 ID 是什么)。

    要检查这一点 - 选择独立实例的安全组,请注意页面底部的选项卡。单击“入站”选项卡。您应该看到一组规则...您需要确保有一个用于 HTTP 和/或 HTTPS 并且在“源”中而不是将 IP 地址放入负载均衡器实例的安全组——它将以sg- 开头,控制台将为您提供一个下拉菜单以显示有效条目。

    如果您没有看到负载均衡器实例的安全组,则它们很可能不在同一个 VPC 中。检查 - 打开控制台并在每个节点上查找 VPC Id。这将从vpc_ 开始。这些应该是一样的。如果不是,您将不得不设置规则和路由表以允许它们之间的流量......这有点复杂,请查看类似的问题以获取有关如何解决该问题的一些想法:Allowing Amazon VPC A to get to a new private subnet on VPC B?

    【讨论】:

      猜你喜欢
      • 2019-11-22
      • 1970-01-01
      • 2018-04-07
      • 2017-08-03
      • 2017-03-24
      • 1970-01-01
      • 2017-06-24
      • 2018-01-03
      • 2013-09-02
      相关资源
      最近更新 更多