我正在尝试使用依赖于客户端子域的遗留应用程序进行一些测试。所以在实际应用中,你可以去:
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 所以没有能力做到这一点。
这是vhost设置:
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,是否有一种简单的方法可以将子域名与Amazon EC2公共DNS地址一起使用?
注意:我正在尝试避免向我们的DNS添加只会在短时间内使用的记录。
如果我必须使用我自己的域名,我该如何处理两个子域名?例如,如果我创建 staging.mydomain.com 以指向EC2实例,那么现在我将如何访问 clienta.staging.mydomain.com ?
答案 0 :(得分:6)
为什么不使用自己的域名?大多数基于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/
答案 1 :(得分:5)
您需要使用您自己的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或任何服务器通道请求到正确的vhost。但是你的clienta.staging.mydomain.com
请求永远不会知道去哪里,除非有明确的dns条目。某些DNS服务提供基于通配符的全方位DNS条目(即*.clients.blah.com
),因此如果您的DNS提供商支持,这可能是一个选项。
另一个建议是使用目录而不是子域。因此,不要创建新的子域名,只需拥有clients.domain.com
DNS条目,然后拥有clients.domain.com/clienta
和clients.domain.com/clientb
答案 2 :(得分:0)
您可以使用其他通配符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