【发布时间】:2021-05-21 22:31:02
【问题描述】:
我正在尝试使用自定义域将静态网站设置到 S3 中,并使用 CloudFront 处理 HTTPS。
问题是根路径可以正常工作,但子路径不能正常工作。
显然,这与我在两个地方都配置为 index.html 的默认根对象有关。
-
example.com->example.com/index.html- 工作正常 -
example.com/about/->example.com/about/index.html- 因 NoSuchKey 错误而失败
有趣的是,如果我打开对 S3 存储桶的读取访问权限并使用 S3 URL,它完全可以正常工作。
有一个 AWS 文档页面,他们在其中讨论了这个问题:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html,但他们甚至没有说解决方案,或者至少我没能找到它。
但是,如果您定义默认根对象,最终用户请求 您的发行版的子目录不返回默认根目录 目的。例如,假设 index.html 是您的默认根对象 并且 CloudFront 收到最终用户的安装请求 CloudFront 分配下的目录:
http://d111111abcdef8.cloudfront.net/install/
CloudFront 不会返回默认根对象,即使是 index.html 出现在安装目录中。
如果您将分发配置为允许所有 HTTP 方法 CloudFront 支持的,默认根对象适用于所有 方法。例如,如果您的默认根对象是 index.php 并且您 编写您的应用程序以向您的根目录提交 POST 请求 域 (http://example.com),CloudFront 将请求发送到 http://example.com/index.php.
CloudFront 默认根对象的行为不同于 Amazon S3 索引文档的行为。当您配置 Amazon S3 存储桶作为网站并指定索引文档,Amazon S3 返回 即使用户请求了索引文档中的子目录 桶。 (索引文件的副本必须出现在每个 子目录。)有关配置 Amazon S3 的更多信息 存储桶作为网站和关于索引文档,请参阅托管 Amazon Simple Storage Service 中的 Amazon S3 上的网站一章 开发者指南。
S3 存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCloudFrontAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example.com/*"
}
]
}
谢谢
【问题讨论】:
-
开启 S3 静态 Web 托管,并在 CloudFront 中使用 s3 网站 URL。
-
我已经有了,事实上,根路径工作正常,错误出在子文件夹中,不知何故 CloudFront 只能在根路径中到达 index.html,但在子文件夹中没有。
-
你是对的,我发现here 的响应,结果证明在 CloudFront 中将 URL 设置为自定义源可以正常工作,但我不完全确定它是最佳选择,但在最少的作品,谢谢
标签: amazon-web-services amazon-s3 amazon-cloudfront