具有多个S3来源的AWS CloudFront

人气:331 发布:2022-10-16 标签: amazon-web-services amazon-s3 amazon-cloudfront

问题描述

我想配置一个AWS CloudFront CDN来提供来自两个AWS S3存储桶的静态内容。一个存储桶应承载根目录中的对象,第二个存储桶应承载特定子路径中的对象。

S3配置

第一个存储桶myapp.home应将主页和所有其他对象直接托管在"/"下。

第二个存储桶myapp.subpage应该用于相同的目的,但用于以"/subpage/"开头的一组特定URL。

这两个存储桶都配置了"静态网站托管"选项,并且默认文档"index.html"已上载到这两个存储桶。

两个存储桶都已使用以下策略公开(在myapp.subpage的情况下,已相应地调整了资源)

{
    "Version": "2012-10-17",
    "Id": "Policy1529690634746",
    "Statement": [
        {
            "Sid": "Stmt1529690623267",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::myapp.home/*"
        }
    ]
}

CloudFront配置

CDN配置为响应名称"host.domain.tld"。

CDN配置有两个来源:

存储桶myapp.home,具有以下属性: 源域名:myapp.home.s3.amazonaws.com 源路径:空 来源类型:S3来源 存储桶myapp.subpage,具有以下属性: 源域名:myapp.subpage.s3.amazonaws.com 源路径:空 来源类型:S3来源

这些来源链接到2个缓存行为:

第一行为 来源:存储桶myapp.subpage: 优先级:0 路径模式:子页面/* 第二行为 来源:存储桶myapp.home: 优先级:1 路径模式:默认(*)

问题

myapp.home源似乎工作正常,但myapp.subpath始终使用以下所有URI返回AccessDended错误:

Host.domain.tld/子路径 Host.domain.tld/子路径/ host.domain.tld/subpath/index.html

更新:我还尝试使用S3网站域名替换来源,例如myapp.subpath.s3-website-eu-west-1.amazonaws.com,,而不是普通的桶域名:主页仍然可以工作,但这次子路径返回404,上面的所有URI都有消息:"指定的键不存在"。

我做错了什么?

提前谢谢

推荐答案

第一行为中的子页面/*是myapp.subpage中的目录。 在存储桶中创建一个名为subpage的目录,然后将index.html放入该存储桶中。

如下:

* myapp.subpage <bucket name>
  * subpage <directory>
     * index.html

290