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

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

我正在托管一个静态网站,使用 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

这个想法是让 anything.example.com 正确解析到网站。但这似乎不起作用。所以当我访问网站:joker.example.com 时,我在浏览器上看到错误消息:

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

答案1

@edvinas.me 的回答是正确的。您必须为您的存储桶创建一个 cloudfront 分发。

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

然后使用 cloudfront url 如 d3lt3rsz2leycm.cloudfront.net。

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

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

并且应该可以工作。

答案2

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

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

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

有一些迂回的方法可以实现这一点,具体取决于您要做什么,但它将需要一个运行 HAProxy、Varnish、Apache 或类似程序的 EC2 实例,以通过重定向响应对通配符主机名的请求,将浏览器的地址栏重写为真实的主机名/存储桶名称,或者混合请求标头并将请求代理到 S3,这并不像听起来那么低效,因为同一区域内的 S3 和 EC2 之间没有数据传输费用,并且延迟很低。

答案3

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

实现此目的的唯一方法是使用 Cloudfront 等外部服务http://aws.amazon.com/cloudfront/这将代理请求。

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

相关内容