我在 S3 和 CloudFront 上托管了一个 Jekyll 博客。在 S3 上设置默认文档效果很好,所有子文件夹都直接转到 index.html。
在我的 CloudFront 发行版中,我已将默认根对象设置为 index.html,但子目录没有获得此对象 - 相反,我收到以下错误
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>about</Key>
<RequestId>F8324894C093EB53</RequestId>
<HostId>
Girhbo7YLEl9sxPS3KjvhbkpL32qNsYgiVLElAhPOvqrekfqfpJ/2AAYRg4rNJ+t4Imc86cjiw4=
</HostId>
</Error>
如果我手动浏览到 domain/subdir/index.html,它可以正常工作。
有任何想法吗?
答案1
当使用具有网站托管功能(可启用索引文档)的 S3 存储桶时,您不想使用存储桶的 REST 端点,这是 CloudFront 将在控制台中为您提供的。您需要输入网站端点。
在创建分发页面上,对于源设置,在源域名框中键入存储桶的 Amazon S3 静态网站托管终端节点,例如:
example.com.s3-website-us-east-1.amazonaws.com
。重要的
请勿从列表中选择您的存储桶的名称,例如
example.com.s3.amazonaws.com
。http://docs.aws.amazon.com/gettingstarted/latest/swh/getting-started-create-cfdist.html
您还可以关闭 CloudFront 中的默认根对象配置。此设置不需要这样做。
请记住,更改传播后,您可能会缓存错误响应几分钟。检查X-Cache
和Age
响应标头以确定您是否看到缓存的响应以及该响应缓存了多长时间。