我正试图用一个传统的应用程序做一些测试,该应用程序依赖于客户的子域。所以在实际应用中,你可以去。
clienta.domain.com
并且会为客户端A打开一个特定的区域。
使用EC2,我试图让应用程序只使用公共DNS地址工作,它看起来类似于这样。
ec2-123-123-123-123.compute-1.amazonaws.com。
问题是,设置我的vhosts(喜欢这个职位),对于主公网DNS地址可以正常工作,但对于子网域就不行了。
clienta.ec2-123-123-123-123.com 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,有一个简单的方法来使用亚马逊EC2公共DNS地址的子域吗?
注意:我试图避免在我们的DNS中添加记录,这些记录只会在短时间内使用。
如果我 必须 使用我自己的域名,如何解决两个子域名的问题?例如,如果我创建了 staging.mydomain.com 指向EC2实例,现在我如何访问 clienta.staging.mydomain.com。?
为什么不使用自己的域名? 大多数基于EC2的Web服务都不使用EC2的公共DNS,因为这个公共DNS很可能会改变。
你可能想调查的是使用弹性IP,以便给你的实例提供稳定的IP地址,你可以针对这些地址配置DNS,然后将这些弹性IP附加到你的EC2实例上。
这里是AWS关于弹性IP的文档。http:/aws.amazon.comarticles1346
当然,如果你计划使用负载均衡配置,那么你实际上会使用弹性负载均衡器而不是弹性IP。 在这种配置中,你的DNS将直接到ELB。
这里是关于弹性负载均衡的信息。http:/aws.amazon.comelasticloadbalancing(弹性负载平衡)
你 需要 来使用自己的DNS,以便使用子域。AWS的DNS在他们的动态分配DNS上没有通配符记录。
你可以尝试一下。
dig clients.ec2-123-123-123-123.compute-1.amazonaws.com
你会收到0个答案。
至于。
如果我必须使用我自己的域名, 我怎么能绕过两个子域?例如,如果我创建staging.mydomain.com来指向EC2实例,现在我将如何访问clienta.staging.mydomain.com?
同样,你需要一个指向主机IP地址的DNS记录clienta.staging.mydomain.com,然后让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
您可以使用另一个通配符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