首页 > 解决方案 > 在使用 S3 REST API 端点时为 CloudFront 设置错误页面

问题描述

我有一个 CloudFront 分配,它指向一个保存我网站静态内容的 S3 存储桶。这是使用 S3 REST API 端点完成的,因此源的域名和路径如下所示:

bucket-name.s3.amazonaws.com

到目前为止,这是有效的,我知道这一点,因为当我打开浏览器并输入https://xxxxxxxxxxxxx.cloudfront.net/index.html时,它会下载 html 文件。但这不是我所追求的全部。我的网站是一个用 React 编写的 SPA(单页应用程序)。这意味着并非客户端代码中提到的所有资源实际上都可以在存储桶中找到。那些在存储桶中物理上不可用的资源是虚拟资源,应该由客户端代码处理。

为此,如果用户在浏览器中输入虚拟 URL 的地址,服务器首先需要验证该资源是否存在。如果没有,服务器应该返回index.html文件而不是 404 错误。这可以在 CloudFront 的错误页面中进行设置。

因此,我为处理所有 404 错误的 CloudFront 分配创建了一个客户错误响应,返回index.html具有 200 ok 状态的文件。但这不起作用。

当输入 URLhttps://xxxxxxxxxxxxx.cloudfront.net/virtual-url时,它返回:

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>39E3967AA5F16693</RequestId>
<HostId>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</HostId>
</Error>

即使是裸 URL 也会https://xxxxxxxxxxxxx.cloudfront.net返回完全相同的错误。

所以我的问题是,当分配使用 S3 REST API 端点时,如何使用 CloudFront 的错误页面?

PS 当我使用 S3 的静态网站端点 ( bucket-name.s3-website.us-east-1.amazonaws.com) 时,同样的机制起作用。

标签: amazon-web-servicesamazon-s3amazon-cloudfront

解决方案


推荐阅读