为S3添加CloudFront但EC2无法正常工作

时间:2019-06-09 11:32:21

标签: amazon-web-services amazon-cloudfront

我正在尝试使用Amazon S3静态网站和Amazon EC2 nodejs服务器设置CloudFront。

我已按照以下步骤操作:

  1. 设置S3存储桶example.com
  2. example.comapi.example.com颁发的ACM中创建证书
  3. 创建CloudFront发行版
  4. 将创建的CloudFront备用域名设置为:example.comapi.example.com
  5. 从ACM添加了SSL证书
  6. 使用example.com.s3-website-AWS_REGION.amazonaws.com创建的原点
  7. 在Route 53中,为example.comapi.example.com添加了条目,别名为指向CloudFront分布。

此后,我的https://example.com已正确加载网页。现在,我也尝试为我的nodejs服务器设置CloudFront。

  1. 使用ec2-IP.AWS_REGION.compute.amazonaws.com在CloudFront分配中添加了新来源。

  2. 为模式api.tutorezie.com/*添加了所有TTL都设置为零的行为。

现在,当我尝试使用https://api.example.com访问nodejs服务器时,我无法这样做并出现错误。我不确定自己在做什么错。

1 个答案:

答案 0 :(得分:1)

您对CloudFront基于虚拟主机提供服务感到困惑,CloudFront并没有这样做,而是查看URI路径,例如:/ api / *等,然后根据路径行为匹配将请求转发到原始服务器。

https://api.example.comhttps://example.com中,它都与默认路径行为相匹配,并向S3发送请求。

可能的解决方案:

  1. 在CNAME中创建一个新的CloudFront并在此处添加api.example.com,并使用现有的证书和来源作为EC2实例,cloudfront不会向您收取创建分发费用。

  2. 如果否,则需要使用Lambda @ edge(Viewer Request / Origin Request(whitelisting HOST header))读取HOST标头,并根据api.example.com选择来源ec2或S3。或example.com。

https://aws.amazon.com/blogs/networking-and-content-delivery/dynamically-route-viewer-requests-to-any-origin-using-lambdaedge/

根据您的要求,选项1应该很容易。