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


12

我托管使用Amazon 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

想法是让any.example.com正确解析到该网站。但这似乎不起作用。因此,当我转到网站:joker.example.com时,我在浏览器上看到错误消息:

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

Answers:


10

@ edvinas.me的答案是正确的。您必须为存储桶创建一个Cloudfront发行版。

创建cloudfront分发时,将“备用域名”选项设置为* .example.com。

然后使用d3lt3rsz2leycm.cloudfront.net之类的cloudfront网址。

现在,您可以添加通配符子域,如下所示:

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

并且应该工作。


1

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

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

主机名是浏览器在Host:标头中发送的值的小写字母。无法配置存储桶以响应多个主机名的方法。

有多种方法可以完成此操作,具体取决于您要执行的操作,但这将需要运行HAProxy,Varnish,Apache或类似内容的EC2实例,以通过重定向到通配符主机名请求将浏览器的地址栏重写为真实的主机名/存储桶名称,或修改请求标头并将请求代理到S3,这并不是听起来那么低效,因为在同一个S3和EC2之间没有数据传输费用区域,并且等待时间很短。


1

您的S3存储桶配置为仅接受对example.com(和/或www.example.com)的请求。您无法将存储桶配置为接受或要激活的任何特定子域。

您可以完成此操作的唯一方法是使用外部服务,例如Cloudfront http://aws.amazon.com/cloudfront/,它将代理请求。

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


3
怎么做-是问题本身。
贾斯珀2014年

由于不支持该配置,因此您需要使用外部服务。
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.