我用一些文件创建了s3存储桶。我使用该S3存储桶创建了CloudFront分配,并将状态更改为已部署。
当我为任何文件卷曲CloudFront时:
<Error><Code>TemporaryRedirect</Code><Message>Please re-send this request to the specified temporary endpoint. Continue to use the original request endpoint for future requests.</Message><Bucket>MY-BUCKET</Bucket><Endpoint>MY-BUCKET.s3-eu-west-1.amazonaws.com</Endpoint><RequestId>...</RequestId><HostId>...</HostId></Error>
当我为任何文件卷曲我的S3存储桶时,我得到了该文件内容。
我做错了什么?如何强制cloudfront缓存文件,以便客户不需要直接从S3获取数据?
答案 0 :(得分:36)
Thx Matt Houser从评论到我的第一篇文章!
当分发尚未完全准备好时,CloudFront似乎缓存了我对文件的第一个请求(但当时它处于已部署状态,所以要小心!)。我要求对缓存中的所有文件进行无效,花了几分钟,但在失效后,所有文件都使用CloudFront网址使用http 200卷曲。
Michael-sqlbot评论后,问题变得清晰了:
所有存储桶至少有两个REST端点主机名。在欧洲西部1号, 他们是example-bucket.s3-eu-west-1.amazonaws.com和 example-bucket.s3.amazonaws.com。第一个将立即 创建存储桶时有效。第二个 - 有时提到 作为“全球终点” - 这是CloudFront使用的一个 - 不会,除非桶在us-east-1。过了几秒钟 到分钟,根据位置和其他因素变化,它变成了 全球可访问。在此之前,307重定向是 回。因此,水桶还没准备好。
答案 1 :(得分:6)
只是要澄清一点,如果发生在您身上,有几种选择:
请等待up to 24h,以使更改完全传播。
将您的存储桶位置更改为us-east-1
区域。
但是最简单的方法可能是将CloudFront原始域名从<bucket>.s3.amazonaws.com
切换为<bucket>.s3-<region>.amazonaws.com
转到“分发设置”->“起源和起源组”并编辑当前起源
例如,在us-west-2
区域中有一个名为stackoverflow的存储桶,它将变成
stackoverflow.s3-us-west-2.amazonaws.com