为 S3 添加 CloudFront 但 EC2 不工作
Adding CloudFront for S3 but EC2 not working
我正在尝试使用 Amazon S3 静态网站和 Amazon EC2 nodejs 服务器设置 CloudFront。
我遵循了以下步骤:
- 设置 S3 存储桶
example.com
- 在
example.com
和 api.example.com
颁发的 ACM 中创建证书
- 创建 CloudFront 分配
- 将创建的 CloudFront 备用域名设置为:
example.com
和 api.example.com
- 已添加来自 ACM 的 SSL 证书
- 创建来源
example.com.s3-website-AWS_REGION.amazonaws.com
- 在 Route 53 中,为
example.com
和 api.example.com
添加了别名指向 CloudFront 分配的条目。
在此之后我的 https://example.com
正在正确加载网页。现在我也尝试为我的 nodejs 服务器设置 CloudFront。
使用 ec2-IP.AWS_REGION.compute.amazonaws.com
在 CloudFront 分配中添加了新源。
添加了所有 TTL 设置为零的模式 api.example.com/*
的行为。
现在,当我尝试使用 https://api.example.com
访问 nodejs 服务器时,我无法访问并出现错误。我不确定我做错了什么。
您对 CloudFront 基于虚拟主机提供服务感到困惑,CloudFront 不这样做,而是查看 URI 路径,例如:/api/* 等,并根据路径将请求转发到源行为匹配。
在两个 https://api.example.com and https://example.com 中,它匹配默认路径行为并向 S3 发送请求。
可能的解决方案:
创建一个新的 CloudFront 并在 CNAME 中添加 api.example.com 并使用现有的证书和来源作为 EC2 实例,cloudfront 不会向您收取创建分发费用。
如果上面没有,需要使用Lambda@edge(Viewer Request/Origin Request(whitelisting HOST header))读取HOST header,根据if选择origin ec2或S3它是 api.example.com 或 example.com。
根据您的要求,选项 1 对您来说应该很容易。
我正在尝试使用 Amazon S3 静态网站和 Amazon EC2 nodejs 服务器设置 CloudFront。
我遵循了以下步骤:
- 设置 S3 存储桶
example.com
- 在
example.com
和api.example.com
颁发的 ACM 中创建证书
- 创建 CloudFront 分配
- 将创建的 CloudFront 备用域名设置为:
example.com
和api.example.com
- 已添加来自 ACM 的 SSL 证书
- 创建来源
example.com.s3-website-AWS_REGION.amazonaws.com
- 在 Route 53 中,为
example.com
和api.example.com
添加了别名指向 CloudFront 分配的条目。
在此之后我的 https://example.com
正在正确加载网页。现在我也尝试为我的 nodejs 服务器设置 CloudFront。
使用
ec2-IP.AWS_REGION.compute.amazonaws.com
在 CloudFront 分配中添加了新源。添加了所有 TTL 设置为零的模式
api.example.com/*
的行为。
现在,当我尝试使用 https://api.example.com
访问 nodejs 服务器时,我无法访问并出现错误。我不确定我做错了什么。
您对 CloudFront 基于虚拟主机提供服务感到困惑,CloudFront 不这样做,而是查看 URI 路径,例如:/api/* 等,并根据路径将请求转发到源行为匹配。
在两个 https://api.example.com and https://example.com 中,它匹配默认路径行为并向 S3 发送请求。
可能的解决方案:
创建一个新的 CloudFront 并在 CNAME 中添加 api.example.com 并使用现有的证书和来源作为 EC2 实例,cloudfront 不会向您收取创建分发费用。
如果上面没有,需要使用Lambda@edge(Viewer Request/Origin Request(whitelisting HOST header))读取HOST header,根据if选择origin ec2或S3它是 api.example.com 或 example.com。
根据您的要求,选项 1 对您来说应该很容易。