75

我正在使用静态网站托管选项在 Amazon S3 上托管一个静态网站,这样 S3 将呈现一个文件夹,而无需让我明确指向我的 index.html 文件。

例如,这里是我的 S3 存储桶中一个页面的直接链接:http: //new.rdegges.com.s3-website-us-east-1.amazonaws.com/category/2009/如您所见,当如果您访问该 URL,Amazon S3 会自动在该目录中呈现 index.html 文件,从而让我拥有干净的 URL。

这一切都在 S3 上运行良好。我遇到的问题是让 Amazon Cloudfront 也能正确处理这种行为。当我创建一个将 S3 存储桶指定为源的 Cloudfront Distribution 并告诉它使用“index.html”作为根时,S3 的 index.html 行为刚刚停止工作。

例如,这是我在 Cloudfront 上的相同 URL:http: //d1mj00c6pby3gc.cloudfront.net/category/2009/

不幸的是,上面的 URL 不起作用,但如果我手动指定索引文件,它会起作用,例如:http ://d1mj00c6pby3gc.cloudfront.net/category/2009/index.html

我的问题是:我需要如何配置 Cloudfront 以使其尊重我网站的 S3 存储桶设置?

4

3 回答 3

121

S3 网站功能可以与 Amazon CloudFront 结合使用。但是,S3 网站使用与常规 S3 存储桶不同的域名。在这种情况下,您需要将Origin Domain NameCloudFront 分配的源配置的 设置为new.rdegges.com.s3-website-us-east-1.amazonaws.com

您可以从 S3 上的静态网站托管面板获取此 URL(端点):

S3 上的静态网站托管面板

一旦 CloudFront 指向 S3 网站域名,S3 网站功能应该可以工作。

于 2013-03-20T16:04:54.940 回答
26

我想在接受的答案中添加一些内容。

首先,确保您Default Root Object的云前端有一个。如文档中所述,这不适用于subdirectories.

在设置新的 cloudfront 发行版时,它会让您选择您的存储桶bucket-name.s3.amazonaws.com。请注意,该区域未在 URL 中指定。您需要做的是从 s3 中获取静态站点 url 并将其用作origin url(该区域将在那里)。

于 2014-06-05T22:28:15.223 回答
3

这可能是游戏的后期,但请查看Lambda@Edge。您可以拦截不带扩展名的Origin 请求,并将它们指向文件夹中的 index.html 文档。这些结果会被缓存,因此 Lambda 仅在收到新请求时才会执行。

于 2018-03-20T18:25:39.813 回答