我刚刚在Amazon S3上部署了一个静态网站,目前可以在这里查看:http://www.rdegges.com.s3-website-us-east-1.amazonaws.com/
如果单击任何文章链接,您会注意到以下错误:
S3抱怨该文件不存在.现在,这就是奇怪的 - 我在我的域名上使用CloudFront.因此,当您单击该文章链接时,它会将请求发送到CloudFront,然后CloudFront尝试从S3存储桶中取回文件.
但是,如果您直接从S3访问相同的URL,例如:http://www.rdegges.com.s3-website-us-east-1.amazonaws.com/2015/building-a-heroku-addon-planning/页面加载就好了.
看来这里有些东西在翻译中迷失了.
有人建议我可以做些什么来修复我的设置?
我会走出一条路,并说指定的密钥在技术上并不存在,因此错误信息在技术上是准确的,但并不能说明整个故事.这应该是一个简单的解决方案.
S3存储桶有两个端点,"REST"和"网站".它们有两个不同的功能集.网站端点提供了索引文档的神奇解决方案(例如index.html,它似乎是在您提供的示例中实际应该返回到浏览器的内容),而REST端点则没有.
在用于网站托管的存储桶前配置CloudFront时,通常不希望通过从下拉列表中选择存储桶名称将源配置为"S3"源.相反,您希望将其配置为"自定义"源,并使用S3控制台中提供的网站端点主机名(例如example-bucket.s3-website-us-east-1...
),否则,CloudFront假定您希望它使用存储桶的REST端点(允许进行身份验证)和私人内容,网站端点没有).
重要
请勿从列表中选择存储桶的名称,例如example.com.s3.amazonaws.com.
http://docs.aws.amazon.com/gettingstarted/latest/swh/getting-started-create-cfdist.html
自从这个问题最初得到回答后,文档被重构了,所以上面显示的消息现在出现在一页之后,并且已经重新编写,但要点是相同的."桶的名称"似乎是指下拉列表中显示的选项,这不是您想要的.
注意
请务必指定静态网站托管端点,而不是桶的名称.
http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-cloudfront-walkthrough.html
您正在使用存储桶的REST端点的提示是因为如果您使用网站端点,则错误消息将不是XML格式.
如上所述,为CloudFront分配创建新原点,然后更改行为以将请求发送到新原点,然后发送CloudFront缓存失效请求/*
,您应该设置.
也可以看看:
http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html#WebsiteRestEndpointDiff
¹两个端点.从技术上讲,有两个以上,因为所有存储桶至少有两个REST端点主机名...但有两种类型的端点.存储桶还具有传输加速端点,该端点使用AWS边缘网络进行更快/更优化的传输,尤其是距离配置存储区域较远的地理位置.这看起来https://example-bucket.s3-accelerate.amazonaws.com
如果你激活它,并且因为你使用更多的AWS网络而不是公共互联网而需要额外的使用费...但是,这是端点部署的差异,而不是端点的行为端点.传输加速端点仍然是REST端点,因此就像其他REST端点一样,它没有网站托管功能.您不希望将CloudFront配置为使用加速端点,因为这不会提供任何改进(CloudFront已经使用边缘网络),但您仍需要支付额外的加速费用.
遇到同样的问题以及我如何解决它是在CloudFront Origin Settings中将Origin Domain Name 设置为
在CloudFront的生成设置确保有index.html
作为默认的根对象.
在S3中,请确保使用此存储桶来托管选定的网站并将其设置index.html
为索引文档.