我已经使用一些文件创建了 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获取数据?
谢谢 Matt Houser 对我第一篇文章的评论!
当分发尚未完全准备好时,CloudFront 似乎缓存了我对文件的第一个请求(但当时它处于部署状态,所以要小心!)。我请求对缓存中的所有文件进行失效,这花了几分钟,但失效完成后,所有文件都使用 CloudFront url 通过 http 200 进行卷曲。
在 Michael-sqlbot 发表评论后,问题变得清晰起来:
所有存储桶至少有两个 REST 端点主机名。在 eu-west-1 中, 它们是 example-bucket.s3-eu-west-1.amazonaws.com 和 example-bucket.s3.amazonaws.com。第一个将立即 Bucket创建时有效。第二个——有时也被提及 作为“全局端点”——CloudFront 使用的端点—— 不会,除非存储桶位于 us-east-1 中。在几秒钟的时间里 分钟,因位置和其他因素而异,它变成 也可在全球范围内访问。在此之前,307重定向是 回。因此,桶还没有准备好。
如果您遇到这种情况,请多澄清一下,有几种选择:
等待最多 24 小时,让更改完全传播。
将存储桶位置更改为
us-east-1
区域。
但最简单的可能是将您的 CloudFront 原始域名从
<bucket>.s3.amazonaws.com
切换为 <bucket>.s3-<region>.amazonaws.com
转到您的分发设置 -> 来源和来源组并编辑当前来源
例如,在
us-west-2
区域中有一个名为 stackoverflow 的存储桶,它将变成
stackoverflow.s3-us-west-2.amazonaws.com
将 CloudFront 原始域名从 .s3.amazonaws.com 切换到 .s3-.amazonaws.com 对我有用!
您可以从 RegionalDomainName 属性中获取此信息。 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3-bucket.html