我已将反应应用程序上传到AWS S3并使用静态网站托管。然后,我将cloudfront分发链接到s3存储桶。
我能够导航到网站并且它正常运行,除非我导航到新页面my-domain / new-page。起初它成功但如果我尝试直接加载页面或刷新我得到403禁止错误。
答案 0 :(得分:5)
使用与S3和CloudFront的反应,我有这个或类似的问题,加载初始索引页面,然后链接到其他页面工作得很好(推送状态更改),但如果我刷新页面或直接链接到页面它出现了" Access Denied,"状态403。
我找到的解决方案是将403和404错误的自定义错误页面添加到CloudFront配置中。
当对象不存在时,S3会响应403,就像客户端路由中的页面一样。
答案 1 :(得分:0)
我注意到当您更改对象并立即查找对象时会发生这种情况。要解决此问题,我们过去常常将对象缓存5分钟,因此CloudFront将在可用时提供缓存版本。
如果要更改对象并将ACL与对象一起应用,这也与此有关。确保您具有公共读取作为存储桶的策略,因此可以减少中断时间。
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}
在CloudFront中启用缓存也解决了这个问题。
希望它有所帮助。