介绍
我在 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/** 应该映射到后端。
- https://app.acmecorp.com/api->https://backend.acmecorp.com
- https://app.acmecorp.com/->http://frontend.acmecorp.com/index.html
显然,这可以通过 Nginx 之类的东西来实现,但我想知道亚马逊是否提供了这样的服务,以及实现此功能需要什么样的构建块
答案1
您可以使用 Cloudfront 和反向代理方法实现您的目标:
首先使用 app.acmecorp.com 作为分配的 CNAME 创建您的分发,并为该子域上传自定义 SSL 证书。
创建两个源,一个指向您的存储桶,另一个指向您的 API 负载均衡器。这两个源将在稍后配置 CDN 行为时使用。
为 /api 创建一个行为,以您的平衡器作为原点,将所有标头传递到原点(这有效地禁用了边缘缓存)
配置默认行为以指向您的 S3 存储桶。
最后,将您的 app.acmecorp.com 指向 DNS 中的 CDN 端点。
Cloudfront 的起源和行为有更多您必须注意的选项,但满足您需求的基本功能就在那里。