使用Amazon Route53 DNS和S3的通配符子域(* .example.com)

我正在主持一个静态网站使用亚马逊Route53的DNS和S3的HTML文件。 它工作正常。

当前设置是:

example.com. A ALIAS s3-website-us-east-1.amazonaws.com. www.example.com. CNAME www.example.com.s3-website-us-east-1.amazonaws.com 

(注意:example.com和www.example.com是S3桶,我的HTML文件驻留在example.com桶中)。

现在我想添加一个像这样的通配符子域 – 这是我所尝试的:

 *.example.com. CNAME www.example.com.s3-website-us-east-1.amazonaws.com 

这个想法是让anything.example.com正确parsing到网站。 但是这似乎没有工作。 所以当我去到网站:joker.example.com我在浏览器上看到错误信息:

 Code: NoSuchBucket Message: The specified bucket does not exist BucketName: joker.example.com 

@ edvinas.me的答案是正确的。 您必须为您的存储桶创build一个云端分布。

在创buildcloudfront分配时,将备用域名选项设置为* .example.com。

然后使用像d3lt3rsz2leycm.cloudfront.net这样的云端url。

现在,您可以像这样添加通配符子域:

 *.example.com. CNAME 3lt3rsz2leycm.cloudfront.net. 

而且应该工作。

您的S3存储桶被configuration为只接受example.com(和/或www.example.com)的请求。 您无法将您的存储桶configuration为接受或您希望处于活动状态的任何特定子域。

您可以采取的唯一方法是使用Cloudfront http://aws.amazon.com/cloudfront/这样的外部服务来代理这些请求。

迈克尔(sqlbot)的回复似乎更详细地覆盖了这一点。

Amazon S3使用主机名来确定存储桶名称。

http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html

主机名称是主机名称中浏览器发送的值的小写。 没有办法configuration存储桶来响应多个主机名。

有一些迂回的方法来实现这一点,这取决于你正在尝试做什么,但是它需要一个运行HAProxy,Varnish,Apache或类似的EC2实例来响应通配符主机名的请求,redirect到将浏览器的地址栏重写为真实的主机名/存储桶名称,或将请求标题写入请求,并将请求代理给S3,因为在S3和EC2之间没有数据传输费用区域,延迟低。