具有多个 S3 源的 AWS CloudFront
AWS CloudFront with multiple S3 origins
我想配置 AWS CloudFront CDN 以提供来自两个 AWS S3 存储桶的 HTML 静态内容。一个存储桶应托管根目录中的对象,第二个存储桶应托管特定子路径中的对象。
S3 配置
第一个存储桶 myapp.home
应托管主页和直接位于“/”下的所有其他对象。
第二个存储桶 myapp.subpage
应该用于相同的目的,但用于一组以“/subpage/”开头的特定 URL。
两个存储桶都配置了 "static website hosting" 选项并启用了默认文档 "index.html",该文档已上传到两个存储桶。
两个存储桶都已 public 使用以下策略创建(在 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 配置有 2 个来源:
- 存储桶
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 时总是 returns 出现 AccessDenied 错误:
- host.domain.tld/subpath
- host.domain.tld/subpath/
- host.domain.tld/subpath/index.html
更新:我还尝试使用 S3 网站域替换来源,例如myapp.subpath.s3-website-eu-west-1.amazonaws.com,而不是普通的 buckets 域:主页仍然有效,但这次的子路径 returns a 404带有消息:"The specified key does not exist" 以上所有 URI。
我做错了什么?
提前致谢
第一个行为中的"subpage/*"是myapp.subpage
中的目录。
在桶中创建一个名为subpage
的目录,然后将index.html放入这个桶中。
如下所示:
* myapp.subpage <bucket name>
* subpage <directory>
* index.html
我想配置 AWS CloudFront CDN 以提供来自两个 AWS S3 存储桶的 HTML 静态内容。一个存储桶应托管根目录中的对象,第二个存储桶应托管特定子路径中的对象。
S3 配置
第一个存储桶 myapp.home
应托管主页和直接位于“/”下的所有其他对象。
第二个存储桶 myapp.subpage
应该用于相同的目的,但用于一组以“/subpage/”开头的特定 URL。
两个存储桶都配置了 "static website hosting" 选项并启用了默认文档 "index.html",该文档已上传到两个存储桶。
两个存储桶都已 public 使用以下策略创建(在 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 配置有 2 个来源:
- 存储桶
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 时总是 returns 出现 AccessDenied 错误:
- host.domain.tld/subpath
- host.domain.tld/subpath/
- host.domain.tld/subpath/index.html
更新:我还尝试使用 S3 网站域替换来源,例如myapp.subpath.s3-website-eu-west-1.amazonaws.com,而不是普通的 buckets 域:主页仍然有效,但这次的子路径 returns a 404带有消息:"The specified key does not exist" 以上所有 URI。
我做错了什么?
提前致谢
第一个行为中的"subpage/*"是myapp.subpage
中的目录。
在桶中创建一个名为subpage
的目录,然后将index.html放入这个桶中。
如下所示:
* myapp.subpage <bucket name>
* subpage <directory>
* index.html