CloudFront支持的网站被重定向到s3存储桶网址

时间:2017-05-26 21:48:57

标签: amazon-web-services amazon-cloudfront

我有一个静态托管启用S3存储桶。还有一个由该存储桶驱动的云端分发。

我已在" mywebsite.com"

的云端分发版中添加了CNAME条目

当我去加载" mywebsite.com"在我的浏览器中,它会重定向到http://my-bucket.s3-us-west-2.amazonaws.com/index.html

为什么会发生这种重定向?如何阻止该主机名被重写?

修改:点击一些建议更改后的设置详细信息:

  • cloudfront - 备用域 :mysite.com
  • cloudfront - 备用域 :www.mysite.com
  • cloudfront - 来源 :my-bucket.s3-website-us-west-2.amazonaws.com
  • route53 - 托管区域 :mysite.com
  • route53 - 记录 :12345.cloudfront.net
  • route53 - CNAME :www.mysite.com - > mysite.com

以及此设置的效果:

  • 正在加载:mysite.com - > 301重定向到my-bucket.s3-website-us-west-2.amazonaws.com
  • 正在加载:www.mysite.com - > 301重定向到my-bucket.s3-website-us-west-2.amazonaws.com
  • 正在加载:my-bucket.s3-website-us-west-2.amazonaws.com - > 200成功
  • 正在加载:d1h3yk3zemxpnb.cloudfront.net - > 301重定向到my-bucket.s3-website-us-west-2.amazonaws.com
  • 正在加载:http://my-bucket.s3.amazonaws.com/ - >权限错误

2 个答案:

答案 0 :(得分:1)

这里的问题是错误配置的副作用。此特定行为可能会在数据桶创建的几分钟或几小时内消失,但潜在问题将无法解决。

在CloudFront后面配置启用静态网站托管的存储桶时,您不希望从存储桶列表中选择存储桶名称。

  

在“创建分发”页面的“原始设置”部分中,对于“源域名”,键入存储桶的Amazon S3静态网站托管端点。例如,example.com.s3-website-us-east-1.amazonaws.com

     

注意

     

请务必指定静态网站托管端点,而不是桶的名称。

     

http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-cloudfront-walkthrough.html#create-distribution

从列表中选择example.com.s3.amazonaws.com条目,而不是在存储桶的网站托管端点中输入,将是此行为的最可能解释。

S3更新全局REST端点层次结构*.s3.amazonaws.com的DNS,并在创建存储桶后的短时间内向存储区的右侧区域发送请求,并且CloudFront似乎依赖于此将请求发送到正确的地点。在初始更新完成之前,S3将返回重定向,CloudFront将该重定向返回给浏览器...但所有这些都表明您没有使用静态网站托管端点作为原始域名。

答案 1 :(得分:0)

从AWS支持https://forums.aws.amazon.com/thread.jspa?threadID=216814


这是创建新存储桶时的预期行为。的 以下页面解释了该概念: http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html

“ Amazon S3将所有虚拟托管样式的请求路由到美国东部(北 如果您使用美国东部地区(弗吉尼亚北部),则默认情况下为“弗吉尼亚州”区域 端点(s3.amazonaws.com),而不是区域特定的端点 (例如s3-eu-west-1.amazonaws.com)。创建存储桶时, 在任何区域,Amazon S3都会更新DNS以将请求重新路由到 正确的位置,这可能需要一些时间。同时,默认 规则适用,并且您的虚拟托管样式请求转到美国东部 (弗吉尼亚北部)区域,Amazon S3使用HTTP 307将其重定向 重定向到正确的区域。”

请花一些时间在S3上,直到域名准备就绪 (通常一个小时左右)。另外,请注意,错误被缓存在 默认情况下,CloudFront。这意味着“ 307临时重定向”已缓存 除非更改,否则将持续300秒: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html

为了再次测试您的Cloudfront,请确保缓存具有 无效: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html

希望有帮助。


默认缓存策略具有

Default TTL 86400

也就是24小时,因此您可能希望使其无效而不是等待。

来自https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html


如果您使用AWS命令行界面(CLI)来使文件无效 并指定包含*通配符的路径,则必须使用 路径周围的引号(“)。

例如:aws cloudfront创建无效--distribution-id distribution_ID-路径“ / *”


如果以上方法均无效,并且您正在开发中,但只想获得可访问的内容,则可以做的另一件事是更改引用或存储桶。

global — {bucket-name}.s3.amazonaws.com

regional — {bucket-name}.s3.{region}.amazonaws.com

如论坛上所述,这将绕过尝试使用复制的存储桶的尝试,而只进行一次操作,这不会失败,因此您将不会获得重定向。

使用curl

可以轻松地看到这一点
$ curl -I http://blah.cloudfront.net/x.svg
HTTP/1.1 307 Temporary Redirect
Content-Type: application/xml
Connection: keep-alive
x-amz-bucket-region: eu-west-1


$ curl -I http://blah.cloudfront.net/x.svg
HTTP/1.1 200 OK
Content-Type: image/svg+xml
Content-Length: 657
Connection: keep-alive