当源是 S3 存储桶时,AWS CloudFront 返回 http 307

问题描述 投票:0回答:3

我已经使用一些文件创建了 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获取数据?

amazon-web-services amazon-s3 amazon-cloudfront
3个回答
63
投票

谢谢 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重定向是 回。因此,桶还没有准备好。


19
投票

如果您遇到这种情况,请多澄清一下,有几种选择:

  • 等待最多 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

0
投票

将 CloudFront 原始域名从 .s3.amazonaws.com 切换到 .s3-.amazonaws.com 对我有用!

您可以从 RegionalDomainName 属性中获取此信息。 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3-bucket.html

© www.soinside.com 2019 - 2024. All rights reserved.