刷新页面时Cloudfront返回403禁止

IT技术 reactjs amazon-web-services amazon-s3 amazon-cloudfront
2021-05-15 19:06:08

我已将 React 应用程序上传到 AWS S3 并使用静态网站托管。然后我将一个 cloudfront 发行版链接到 s3 存储桶。

我能够导航到该站点并且它正常运行,除非我导航到一个新页面 my-domain/new-page。起初它成功了,但如果我尝试直接加载页面或刷新,我会收到 403 禁止错误。

2个回答

使用与 S3 和 CloudFront 的react,我遇到了这个或类似的问题,加载初始索引页面然后链接到其他页面工作得很好(推送状态更改),但是如果我刷新页面或直接链接到页面,它来了状态为“拒绝访问”,状态 403。

我找到的解决方案是将 403 和 404 错误的自定义错误页面添加到 CloudFront 配置中。

当对象不存在时,S3 响应 403,就像客户端路由中的页面一样。

Cloud Front 自定义错误的屏幕截图

我注意到当您更改对象并立即查找对象时会发生这种情况。为了解决这个问题,我们曾经将对象缓存 5 分钟,因此 CloudFront 将在可用时提供缓存版本。

如果您正在更改对象并将 ACL 与对象一起应用,这也相关。确保您将公共读取作为存储桶的策略,以便减少中断时间。

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/*"]
    }
  ]
}

在 CloudFront 中启用缓存也解决了这个问题。

希望能帮助到你。