CNAME到S3存储桶Amazon

29

我想使用子域名而不是直接使用Amazon S3存储桶的URL。因此,我希望能够通过这样的URL从存储桶下载图像:http://bucket-images.s3-eu-west-1.amazonaws.com/path/to/image.png,而是使用http://assets.domain.com/path/to/image.png。 我尝试设置了一个CNAME,类似于以下内容:

CNAME   assets   domain.com    bucket-images.s3-eu-west-1.amazonaws.com

但是在设置完这个CNAME后,当我访问该域名时,亚马逊会显示以下错误:

<Error>
    <Code>NoSuchBucket</Code>
    <Message>The specified bucket does not exist</Message>
    <BucketName>assets.domain.com</BucketName>
    <RequestId>45646DFSDFSFASDF</RequestId>
    <HostId>
        dfasdcvcvd546456454ds5fasdf4ad5f64asdfasdfccdfgvggtg
    </HostId>
</Error>

这里他们建议更改存储桶名称:https://forums.aws.amazon.com/message.jspa?messageID=237562 但这没有意义。 我之前参与过一个项目,使用的存储桶名称与子域完全不同。 因此必须有一种方法... 有谁可以帮助我吗?


1
存储桶的名称是什么?您介意告诉我们涉及的完整域名,以便我们查看并确定其是否通过DNS正确解析? - Bruce P
2个回答

51

对于S3,您需要使CNAME和存储桶名称匹配:

存储桶名称必须与CNAME相同。因此,如果创建了一个CNAME将images.johnsmith.net映射到images.johnsmith.net.s3.amazonaws.com,则http://images.johnsmith.net/filename将与http://images.johnsmith.net.s3.amazonaws.com/filename相同。

所以在您的特定示例中,您需要将存储桶命名为assets.domain.com

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

如果您需要更多的灵活性,您可以为您的S3存储桶创建一个CloudFront分发,并为您的CloudFront分发分配一个CNAME。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html


3
Cloudfront,就这样!非常感谢。 - Erik van de Ven
2
值得一提的是,虚拟主机URL不允许使用SSL,这可能会很麻烦。因此,如果您需要基于HTTPS的URL,则需要选择其他选项,如CloudFront。 - Vasily Bezruchkin
我知道亚马逊区域不能托管两个具有相同名称的存储桶,因此会出现“存储桶已存在”的错误。因此,如果没有使用Cloudfront(我使用Cloudflare),如果有人将其存储桶命名为我的域名,则我无法拥有相同的CNAME和S3存储桶,那么我就完了吗?真的是这样吗? - marko-36
有趣的事实:(至少在不使用Cloudfront的情况下),您CNAME的自定义部分可以是任何内容。我的“www”和“@” CNAME记录指向“wtf.s3-website.eu-central-1.amazonaws.com”,只要存储桶名称是相同的域和子域,它就可以工作。 - marko-36

1

它已经在他的回答中提到了(比这个回答早2年),而且是CloudFront,不是Cloudflare。 - gdoron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接