【问题标题】:How can I serve multiple sub-domains using a single Elastic IP Address in AWS using Route 53?如何使用 Route 53 在 AWS 中使用单个弹性 IP 地址为多个子域提供服务?
【发布时间】:2016-04-28 03:31:18
【问题描述】:

我在 AWS 上有一个弹性 IP 地址,我想使用该 IP 地址根据子域将流量路由到多个不同的 EC2 实例。基本上,与 Apache httpd 服务器中的虚拟主机方式相同。例如:

  • example.com - ELB:xxx.xxx.xxx.xxx
  • test.example.com 指向 EC2 实例 ID 1
  • build.example.com 指向 EC2 实例 ID 2

每个域的所有流量都会转到 xxx.xxx.xxx.xxx,然后根据子域名 Route 53 将流量发送到正确的实例。

我浏览了 Route 53 的文档,但看不出这是如何完成的。我还查看了 Amazon ELB,但不确定这是否可行。

有谁知道如何仅使用 AWS 工具(Route 53 和/或 ELB)进行设置?如果可以避免的话,我宁愿不必编写脚本或使用反向代理。

任何想法或帮助都会很棒。提前致谢。

【问题讨论】:

  • 一个弹性 IP 地址只能与单个 EC2 实例关联。因此,如果您有 2 个不同的 EC2 实例需要将子域重定向到,那么您将需要 2 个弹性 IP 地址。
  • 我能否将弹性 IP 分配给域或面向 Internet 的 ELB,然后通过实例 ID 或私有 IP 在 AWS 内部获取流量?
  • 不使用 ELB。您可以使用 nginx、HAProxy 或其他负载均衡器来做到这一点。
  • 谢谢马特。我希望不必走那条路,但如果看起来那样可能是唯一的解决方案。

标签: amazon-web-services amazon-ec2 network-programming amazon-elb amazon-route53


【解决方案1】:

您不需要为每台服务器设置一个弹性 IP。每台服务器都已经带有一个 IP,所以你可以使用它(如果你真的想通过 IP 地址来寻址服务器) - 但你可能应该做的是在你的域上为每台服务器设置一个 cname,然后寻址服务器的通过 dns 名称,而不是 IP 地址。

即:

server1.example.com
server2.example.com
server3.example.com 

您不需要使用任何 EIP。

也许您可以更好地解释为什么您认为所有流量都需要通过一个 IP 地址?

我不能确定为什么 AWS 将您限制为仅 5 个 EIP,但我很确定这是因为如果您发现您需要数百个 EIP,那么您可能做错了 - 并迫使您超过 5 个请求使他们能够与您展开讨论并帮助您以更好的方式进行讨论。

【讨论】:

  • 确实如此,具体取决于用例。尽管值得注意的是,不建议在非弹性 IP 上记录别名:这通常是一种不好的做法,因为此 IP 的任何更改(例如停止/启动您的机器)都可能导致您的站点停机,而新的 dns价值正在传播。 afaik AWS 的限制可以保护用户免受不良做法的影响(如您所说),如果您被黑客入侵或行为不端,账单会在 10 分钟内增加 10,000 美元,还可以帮助 AWS 管理其资源
  • 感谢您的反馈。我希望通过单个弹性 IP 地址路由所有流量的原因是,我不必向亚马逊索要大量额外的 EIP,因为正如你所说,如果我必须这样做,那么我很有可能做错了。我希望链接到实例 ID(可能不可能)的原因是,如果服务器重新启动并且实例获得新的公共 IP 和/或公共 DNS,它仍然可以在没有我手动干预的情况下访问。
  • 如果需要,您可以在引导过程中添加一个小脚本,使用正确的 IP 地址更新节点的 route53 记录。传播 dns 需要几分钟,但除非您经常重新启动实例,否则这无关紧要。
  • 谢谢。这听起来是解决问题的好方法。
【解决方案2】:

对于要将流量重定向到的每个不同的 EC2 实例,您需要 1 个弹性 IP 地址。

  1. 为 example.com 创建您的 CNAME 或 ALIAS 记录并将其指向您的 ELB。
  2. 对于您需要子域的每个不同 EC2 实例,请执行以下操作:
    1. 分配弹性 IP 地址。
    2. 将该弹性 IP 地址分配给 EC2 实例。
    3. 在 Route 53 中创建一条 A 记录,将 subdomain.example.com 指向该弹性 IP 地址。

注意:由于您的 EC2 实例需要直接访问,因此它们需要驻留在公共子网中。

【讨论】:

  • 谢谢马特。我正在尝试进行设置,这样每次我需要添加新服务器时,我都不必返回亚马逊获取新的弹性 IP 地址(初始限制为 5 个弹性 IP 地址)。所以我认为你说如果我有 100 台不同的服务器是正确的。那么我需要 100 个来自 Amazon 的唯一弹性 IP 地址才能公开访问它们?
  • 只有在您希望 EC2 实例的 IP 地址保持一致时才需要弹性 IP 地址。如果您只需要公共访问,那么自动分配的公共 IP 地址也可以使用。但是,如果实例停止并重新启动,此 IP 将发生变化。使用非弹性 IP 地址应保留仅供内部使用。 (例如开发/测试服务器)。
猜你喜欢
  • 2020-12-09
  • 2016-02-20
  • 2016-07-18
  • 1970-01-01
  • 2015-01-17
  • 2013-07-29
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多