将子域名与Amazon EC2公共DNS地址一起使用?

时间:2013-12-27 18:24:34

标签: apache amazon-web-services dns amazon-ec2

我正在尝试使用依赖于客户端子域的遗留应用程序进行一些测试。所以在实际应用中,你可以去:

  

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

3 个答案:

答案 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/clientaclients.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