4

我在AWS上有一个弹性IP地址,我想使用该IP地址将流量路由到基于子域的多个不同的EC2实例。基本上,与Apache httpd服务器中的虚拟主机一样。例如:如何在使用Route 53的AWS中使用单个弹性IP地址提供多个子域?

  • 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的文档,我看不到这是如何完成的。我也看了亚马逊ELB,但不确定这是否会奏效。

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

任何想法或帮助将是伟大的。提前致谢。

+0

弹性IP地址只能与单个EC2实例关联。因此,如果您有2个不同的EC2实例需要将子域重定向到,则需要2个弹性IP地址。 –

+0

我可以将弹性IP分配给域或面向ELB的互联网,然后通过实例ID或私有IP在AWS内部路由流量? – user3770447

+3

不使用ELB。您可以使用nginx,HAProxy或其他负载平衡器来完成此操作。 –

回答

4

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

即:

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

你不需要使用任何EIP的。

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

我不能肯定地说为什么AWS限制你只有5个EIPs,但我非常肯定它的原因,因为如果你发现你需要数百个EIP,那么你可能做错了 - 并强迫你请求超过5个,使他们能够与您开展讨论,并帮助您以更好的方式进行讨论。

+0

确实如此,这取决于用例。尽管值得注意的是,不建议在非弹性IP上记录别名:由于此IP的任何更改(例如,停止/启动您的计算机)都可能导致网站停机,而新的dns价值正在传播。 afaik AWS的限制可以保护用户免受恶意做法(如您所说),10分钟内增加10k $的账单,以防万一被黑客入侵或出现故障,并帮助AWS管理其资源 – Tom

+0

感谢您的反馈。我期望通过一个弹性IP地址路由所有流量的原因是,我不必向亚马逊请求额外的EIP,因为正如你所说,如果我必须这样做,那么我有机会做错了。 而我正在寻找链接到实例ID(可能不可能)的原因是,如果服务器重新启动,并且实例获得新的公共IP和/或公共DNS,它仍然可以访问,无需手动干预我。 – user3770447

+0

如果需要,您可以在启动过程中添加一些脚本,以更新具有正确IP地址的节点的route53记录。 dns传播需要几分钟的时间,但除非您重新启动实例,否则应该没有多大关系。 –

0

对于要将流量重定向到的每个不同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实例需要直接访问,他们将需要驻留在公共子网内。

+1

谢谢马特。我试图设置这个功能,这样我就不必每次需要添加新服务器时都要返回Amazon获取新的弹性IP地址(初始限制为5个弹性IP地址)。所以我正确地认为,如果我有100台独特的服务器,你就是这么说的。那么我需要从亚马逊获得100个独特的弹性IP地址,以便他们可以公开访问? – user3770447

+0

只有当您希望EC2实例的IP地址一致时,才需要弹性IP地址。如果你只需要公共访问权限,那么自动分配的公共IP地址也可以工作。但是,如果实例停止并重新启动,则此IP将会更改。使用非弹性IP地址应仅供内部使用。 (如开发/测试服务器)。 –

相关问题