AWS Cloudfront重定向到S3存储桶

时间:2016-08-03 05:43:48

标签: amazon-web-services amazon-s3 amazon-cloudfront amazon-route53

我创建了一个云端分发来为静态网站提供服务。 S3是原始服务器。 现在,如果我们访问cloudfront url,它会重定向到S3位置。

d2s18t7gwlicql.cloudfront.net 要么 test.telekha.in

在浏览器中显示 https://telekha-test-www.s3.ap-south-1.amazonaws.com/index.html#/dashboard

我期待https://test.telekha.in/#/dashboard

如果我通过curl访问https://test.telekha.in,则会返回我的index.html文档

如果我通过curl访问http://test.telekha.in,则返回

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>CloudFront</center>
</body>
</html>

但在浏览器中,http和https都会重定向到https://telekha-test-www.s3.ap-south-1.amazonaws.com/index.html#/

请告诉我如何解决此问题。

5 个答案:

答案 0 :(得分:17)

我发现了这个问题。它采用云端配置。 This博客帮助了我。

在定义原点时我直接选择了S3存储桶。我们应该进入S3存储桶的域名,如telekha-test-www.s3-website.ap-south-1.amazonaws.com

答案 1 :(得分:16)

首先要检查你是否认为你看到这个是运行下面的curl命令。如果它返回HTTP/1.1 307 Temporary Redirect,那么您将看到此问题。

$ curl -I https://YOUR_CF_DOMAINNAME.cloudfront.net/

HTTP/1.1 307 Temporary Redirect
Content-Type: application/xml
Content-Length: 0
Connection: keep-alive
x-amz-bucket-region: ap-southeast-2
Location: http://yourS3bucketname.s3-ap-southeast-2.amazonaws.com/
Date: Wed, 12 Jul 2017 00:20:27 GMT
Server: AmazonS3
Age: 1775
X-Cache: Hit from cloudfront
Via: 1.1 someid.cloudfront.net (CloudFront)
X-Amz-Cf-Id: someguid==

我发现这个问题的最佳描述是:

  

S3更新全局REST端点层次结构* .s3.amazonaws.com的DNS,并在创建存储桶后的短时间内向存储区的右侧区域发送请求,并且CloudFront似乎依赖于此来发送请求到了正确的地方。在初始更新完成之前,S3将返回重定向,CloudFront将重定向返回给浏览器。 〜michael-sqlbot

鉴于此问题实际上是由于在S3中配置存储桶时发生的S3存储桶名称的内部DNS传播(不是100%清除,但似乎非常可能),那么应该可以避免这种情况在配置Cloudfront发行版之前在S3中配置公共网站时出现问题,并根据doco将S3公共网站名称配置为云端源而不是s3存储桶名称。

作为参考,我将S3存储桶名称和S3网站名称配置为Cloudfront起源,我可以说它们都可以工作! (最终?)

参考文献:

答案 2 :(得分:7)

事实证明这只是一个时间问题,如果一切都配置正确,它会在一段时间后自行修复。可以在this AWS论坛帖子中找到更多信息。

此处当前接受的答案和链接blog article建议为您的S3存储桶启用静态网站,然后将CF源更改为指向该静态网站。此解决方案确实解决了重定向问题,但副作用是您现在可以使用CF URL或自定义CNAME以及使用S3 URL来使用网站。

答案 3 :(得分:2)

快速解决方案

使用S3存储桶的区域域名来配置CloudFront发行版的来源,例如:{bucket-name}.s3.{region}.amazonaws.com


说明

根据AWS开发者论坛Cloudfront domain redirects to S3 Origin URL上的讨论,为新创建的S3存储桶创建和传播DNS记录需要时间。对于在美国东部(弗吉尼亚北部)区域创建的存储桶而言,该问题不可见,因为该区域是默认区域(备用)。

每个S3存储桶都有两个域名,一个是全局域名,一个是区域域名,即:

  • 全局-{bucket-name}.s3.amazonaws.com
  • 区域性-{bucket-name}.s3.{region}.amazonaws.com

如果您将CloudFront发行版配置为使用全局域名,则由于DNS配置需要时间,您可能会遇到此问题。

但是,您可以在原始配置中使用区域域名来避免此DNS问题。


CloudFormation模板

如果您正在使用CloudFormation,则可以使用RegionalDomainName资源的AWS::S3::Bucket输出属性:

S3Bucket:
  Type: AWS::S3::Bucket

CloudFrontDistribution:
  Type: AWS::CloudFront::Distribution
  Properties:
    DistributionConfig:
      Origins:
        - DomainName: !GetAtt S3Bucket.RegionalDomainName

更多信息

同样,我强烈建议阅读有关S3不同路径格式的未来的博客文章:

答案 4 :(得分:0)

要扩展已接受的答案,此部分在引用的博客文章末尾特别有用:

  

几天前,我发现了一个细微的“错误”:使用类似   www.example.com/about/,Amazon S3实际上将返回“ index.html”   文件夹中的文件(因为它被配置为静态网站)   桶)。

     

有趣的是,如果您省略了斜杠   (www.example.com/about),S3将首先检查是否有一个名为   存在“关于”。如果不是,它将认为大约是   文件夹,并将301重定向到about /。使用时   CloudFront,这意味着CloudFront实际上将缓存...   重定向而不是文件本身! 因此,您必须确保   您所有的网址均以斜杠结尾,以避免无用   重定向。