哪种 AWS 服务可以避免 S3 静态内容和 AWS 后端的 CORS 问题

哪种 AWS 服务可以避免 S3 静态内容和 AWS 后端的 CORS 问题

介绍

我在 Amazon AWS 上部署了以下架构。

高级架构

目标是公开一个 Web 应用程序(单页应用程序),作为https://app.acmecorp.com。这是一个单页应用程序,它:

  • 提供静态资源(html / js / css)
  • 需要通过 javascript 访问 REST 后端

后端

这个想法是将后端部署在 Elastic Container Service 集群中(通过 docker)。然后这些后端被生成/自动缩放到由负载均衡器提供服务的目标组中。后端通过以下方式公开https://backend.acmecorp.com.(指向 AWS 负载均衡器的 DNS CNAME)

前端

单页应用程序部署在 Amazon S3 Bucket 中,并通过 S3 静态站点托管公开。(http://frontend.s3-website-us-west-2.amazonaws.com)也可以通过 DNS CNAME 公开http://frontend.acmecorp.com

反向代理

我想要的是以下内容。用户通过以下方式访问应用程序https://app.acmecorp.com。这应该提供静态内容。为了避免设置 CORS,我希望单页应用程序能够从该域调用 API /api,因此调用https://app.acmecorp.com/api/** 应该映射到后端。

显然,这可以通过 Nginx 之类的东西来实现,但我想知道亚马逊是否提供了这样的服务,以及实现此功能需要什么样的构建块

答案1

您可以使用 Cloudfront 和反向代理方法实现您的目标:

  1. 首先使用 app.acmecorp.com 作为分配的 CNAME 创建您的分发,并为该子域上传自定义 SSL 证书。

  2. 创建两个源,一个指向您的存储桶,另一个指向您的 API 负载均衡器。这两个源将在稍后配置 CDN 行为时使用。

  3. 为 /api 创建一个行为,以您的平衡器作为原点,将所有标头传递到原点(这有效地禁用了边缘缓存)

  4. 配置默认行为以指向您的 S3 存储桶。

  5. 最后,将您的 app.acmecorp.com 指向 DNS 中的 CDN 端点。

Cloudfront 的起源和行为有更多您必须注意的选项,但满足您需求的基本功能就在那里。

相关内容