使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

Cloudfront 如何使用S3自定义错误页面?

0

【以下的问题经过翻译处理】 我一直在阅读 此页面关于 CloudFront 中的自定义错误页面,并疯狂地尝试设置 CloudFront 和 S3获取自定义错误页面。

我有一个设置为静态站点的 S3 存储桶。您可以在这里访问它:

https://cl-error-docs-static-website.s3.amazonaws.com/

我在其中放置了一个自定义 404 页面,您可以在此处访问:

https://cl-error-docs-static-website.s3.amazonaws.com/errors_5xx/404.html

我认为这在 S3 方面应该足够了,所以现在它只是让 CloudFront 在从正常来源(ALB)获得 404 时访问该页面。

在 CloudFront 中,我:

  • 创建了一个新的源站并将其指向 S3 存储桶。
  • 在 CloudFront 中创建了一个路径模式为“/errors_5xx/*”的行为,它应该很好地服务于 S3 存储桶。
  • 创建自定义错误页面,只要正常来源有 404 响应,就会返回 /errors_5xx/404.html

但是当我加载返回 404 的页面时,如下所示:

https://www.courtlistener.com/some-random-url-asdf

我得到以下S3访问结果:

<Error>
<Code>NotFound</Code>
<Message>The resource you requested does not exist</Message>
<RequestId>SCN2DCJBR4JRHCJR</RequestId>
<HostId>
OEG57JmYL5dclH5biQ8/QrlEsEmITH+6fwmu/01feEjeT0TCARqdklfKryvcdzg1EM9f3FpEATI=
</HostId>
</Error>

似乎 CloudFront 从正常来源(ALB)收到错误,然后转到存储桶并查找相同的路径,而不是查找位于“/errors_5xx/404.html”的页面。

感觉好像遗漏了一些东西,但我已经尝试了一切,我多次阅读文档,甚至拉出[旧页面](https://web.archive.org/web/20140319123040/http:/ /blog.celingest.com/en/2013/12/12/cloudfront-configuring-custom-error-pages/) 来自互联网存档页面。

请求帮助!

profile picture
专家
已提问 1 年前94 查看次数
1 回答
0

【以下的回答经过翻译处理】 据我了解,您首先创建了一个带有自定义错误页面的 S3 网站。错误页面可在 https://cl-error-docs-static-website.s3.amazonaws.com/errors_5xx/404.html 访问

所以首先,您可以访问上述 URL 的原因是您的存储桶具有开放策略。如果您使用的是存储桶网站 URL,它将如下所示: http://cl-error-docs-static-website.s3-website-us-east-1.amazonaws.com 这是因为 S3 网站端点只能通过 HTTP 访问。

现在查看您的原始 URL,您已经在 CloudFront Origin 配置中使用了 S3 Endpoint URL。我建议您执行以下操作:

  1. 移除开放桶策略。
  2. 阻止所有公共访问。
  3. 禁用存储桶上的 S3 网站。
  4. 为 S3 存储桶编辑 CloudFront Origin
  • S3 bucket access = Yes use OAI (bucket can restrict to access only CloudFront)
  • 如果您没有 Origin Access Identity,请创建一个然后选择它。
  • Bucket policy = Yes,更新bucket policy
  1. 保存您的更改。

此方法将使您的存储桶私有化,并创建一个身份以仅允许从 CloudFront 访问您的存储桶。 还要确保添加错误页面 403,因为当您尝试访问不存在的对象时,S3 将返回错误 403 访问被拒绝。 https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-access-to-amazon-s3/ https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html

最后请注意,如果您的存储桶需要公开访问,请使用 S3 网站 URL 作为您的来源,并将您的来源设为自定义来源。

希望有所帮助。

profile picture
专家
已回答 1 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则