将子域与 Amazon EC2 公有 DNS 地址一起使用?
Posted
技术标签:
【中文标题】将子域与 Amazon EC2 公有 DNS 地址一起使用?【英文标题】:Use Subdomain with Amazon EC2 Public DNS Address? 【发布时间】:2014-01-15 08:20:13 【问题描述】:我正在尝试对依赖于客户端子域的遗留应用程序进行一些测试。所以在实际应用中,你可以去:
clienta.domain.com
它会为客户 A 打开一个特定的区域。
对于 EC2,我试图让应用程序仅使用类似于此的公共 DNS 地址工作:
ec2-123-123-123-123.compute-1.amazonaws.com
问题是,设置我的虚拟主机 (like this post) 可以正常用于主公共 DNS 地址,但不适用于子域。
clienta.ec2-123-123-123-123.compute-1.amazonaws.com => 不工作
我想这是因为还必须创建 DNS CNAME 记录?我显然不拥有 amazonaws.com,所以没有能力这样做。
这是虚拟主机设置:
NameVirtualHost *:80
# Primary domain
<VirtualHost *:80>
DocumentRoot "/var/www/vhosts/myapp"
ServerName ec2-123-123-123-123.compute-1.amazonaws.com
<Directory "/var/www/vhosts/myapp">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
# Wildcard Sub Domains
<VirtualHost *:80>
DocumentRoot "/var/www/vhosts/myapp"
ServerName clients.ec2-123-123-123-123.compute-1.amazonaws.com
ServerAlias *.ec2-123-123-123-123.compute-1.amazonaws.com
<Directory "/var/www/vhosts/myapp">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
TL;DR; 在不弄乱 DNS 的情况下,有没有一种简单的方法可以
注意:我试图避免将记录添加到我们的 DNS 中,这些记录只会在短时间内使用。
更新
如果我必须使用自己的域,我该如何处理两个子域?例如,如果我创建 staging.mydomain.com 以指向 EC2 实例,那么现在我将如何访问 clienta.staging.mydomain.com?
【问题讨论】:
更新了我的答案以回答您的更新问题。 【参考方案1】:您为什么不使用自己的域名?大多数基于 EC2 的 Web 服务不使用 EC2 公共 DNS,因为公共 DNS 可能会发生变化。
您可能想要调查的是使用弹性 IP,以便为您的实例提供可以配置 DNS 的稳定 IP 地址,然后将这些弹性 IP 附加到您的 EC2 实例。
这是关于弹性 IP 的 AWS 文档:http://aws.amazon.com/articles/1346
当然,如果您计划使用负载均衡配置,那么您实际上会使用 Elastic Load Balancer 而不是 Elastic IP。在此配置中,您的 DNS 将定向到 ELB。
这里是有关 Elastic Load Balancing 的信息:http://aws.amazon.com/elasticloadbalancing/
【讨论】:
这个设置实际上是为了测试几个小时而设计的,然后就放弃了。在我自己的域的注释上,我尝试创建一个“staging.mydomain.com”并指向它,但后来我遇到了如何拥有 2 个子域的问题,如“client1.staging.mydomain.com”? @cilosis 使用弹性 IP。您可以在启动实例时附加它们,当实例停止时它们将自动分离。在您的示例中,staging.mydomain.com
和 client1.staging.mydomain.com
都需要 DNS,因为它们是两个独立的、不相关的子域。
弹性 IP 不是免费的。【参考方案2】:
您需要使用自己的 DNS 才能使用子域。 AWS 的 DNS 在其动态分配的 DNS 上没有通配符记录。
你可以试试:
dig clients.ec2-123-123-123-123.compute-1.amazonaws.com
,您将收到 0 个答案。
至于:
如果我必须使用自己的域,我该如何处理两个子域?例如,如果我创建 staging.mydomain.com 以指向 EC2 实例,那么现在我将如何访问 clienta.staging.mydomain.com?
同样,您需要一个 DNS 记录 clienta.staging.mydomain.com 指向主机的 IP 地址,然后让 Apache 或任何服务器将这些请求引导到正确的虚拟主机。但是你的clienta.staging.mydomain.com
请求永远不会知道去哪里,除非有明确的 dns 条目。一些 DNS 服务提供基于通配符的通用 DNS 条目(即*.clients.blah.com
),因此如果您的 DNS 提供商支持,这可能是一个选项。
另一个建议是使用目录而不是子域。因此,与其创建新的子域,不如使用clients.domain.com
DNS 条目,然后拥有clients.domain.com/clienta
和clients.domain.com/clientb
【讨论】:
【参考方案3】:您可以使用其他通配符 DNS 服务,例如 nip.io:
clienta.ec2-123-123-123-123.nip.io
使用host
命令查看:
$ host ec2-123-123-123-123.nip.io
ec2-123-123-123-123.nip.io has address 123.123.123.123
$ host clienta.ec2-123-123-123-123.nip.io
clienta.ec2-123-123-123-123.nip.io has address 123.123.123.123
【讨论】:
以上是关于将子域与 Amazon EC2 公有 DNS 地址一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
将 NodeJS 服务器端口重定向到子域或文件夹(amazon ec2)