基于路径的云端和 ec2 路由

Path based routing to cloudfront and ec2

所以目前我们有两个 ec2 实例(比如说 A 和 B)和一个云端。

如果用户转到 www.appdomain.com/app,用户应该被路由到云端 SPA 页面。但是,如果用户访问 www.appdomain.com,则应将用户路由到 EC2 实例 A,如果用户访问 www.appdomain.com/api,则应将其路由到 EC2 实例 B。

所有这些应用程序必须在同一个域中。

现在我们了解了如何使用应用程序负载均衡器设置路径规则,但也想知道如何将其设置到云端。

更新: 所以总而言之,问题是我们如何将 /app 路由到 cloudfront / 和 /api 到 ec2.

All of these applications must be on the same domain.

在这种情况下,针对该域的每个请求都必须先通过 CloudFront

您的 DNS 记录将需要指向 CloudFront(而不是 ALB),然后 CloudFront 负责将请求路由到适当的目标——通过 ALB 到 EC2 实例,到 S3 存储桶,到任何您需要请求 - 这些东西中的每一个都称为内容 origin.

一旦来源由其各自的域名(不是您站点的域名,而是专门用于相关资源的域名)指定,您就可以将 CloudFront path patterns 定义为 select 哪个来源是接收每个模式的请求(例如/api*)。

一旦您的 DNS 更改为指向 CloudFront,所有请求都会先到达那里,然后传递给下一个服务,除非 CloudFront 有所请求对象的缓存副本——在这种情况下,CloudFront 将为它提供服务从它的缓存中,不会将任何内容发送到源。

您无法从 ALB 路由到 CloudFront,但可以从 CloudFront 路由到 ALB。

如果不使用能够匹配路径并代表请求者获取内容的反向代理,则无法将域细分为多个基于路径的不同内容源 -- HTTP 和 DNS 不能支持这样的功能。 CloudFront除了提供CDN服务外,还是一个反向代理。

ALB 当然也是一个反向代理,但不像 CloudFront 那样支持那么多不同的 类型 内容来源 -- ALB 只支持 EC2 实例,服务器在您的数据中心(在这种情况下,ALB 必须具有 VPN 路径才能访问它们),而 Lambda 充当内容来源。 CloudFront 几乎可以使用任何内容作为内容源,只要它说 HTTP/HTTPS 并且可以通过 Internet 访问。 (举一个有点随机的例子,CloudFront 甚至可以使用来自其他供应商的服务——比如 Google Cloud Storage 存储桶——作为内容来源,如果这是你需要做的事情,无论出于什么原因...... . 因为这些可以通过 public Internet 上的 HTTP 访问。)