刷新页面时,Cloudfront会返回403

时间:2017-09-29 23:08:57

标签: reactjs amazon-web-services amazon-s3 amazon-cloudfront

我已将反应应用程序上传到AWS S3并使用静态网站托管。然后,我将cloudfront分发链接到s3存储桶。

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

2 个答案:

答案 0 :(得分:5)

使用与S3和CloudFront的反应,我有这个或类似的问题,加载初始索引页面,然后链接到其他页面工作得很好(推送状态更改),但如果我刷新页面或直接链接到页面它出现了" Access Denied,"状态403。

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

当对象不存在时,

S3会响应403,就像客户端路由中的页面一样。

fiddle

答案 1 :(得分:0)

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

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

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

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

希望它有所帮助。