【问题标题】:Path based routing to cloudfront and ec2到云端和 ec2 的基于路径的路由
【发布时间】:2019-06-24 01:46:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 这很简单。您只需在 CloudFront 分配中设置多个源,并为每个源配置域名和路径。如果您有具体问题,请提出。
  • 好吧,澄清一下,我还需要路由到两个 EC2 实例(一个用于 /api,一个用于 /),当调用 /app 时,我只需要路由到云端分发。所以我尝试使用路径规则设置 ALB,但是我只能针对 EC2 实例而不能针对云端。我该怎么做?
  • CloudFront 是一个可以处理所有路径路由的 CDN。如果您使用 CloudFront,则不需要为此使用 ALB。

标签: amazon-web-services amazon-s3 amazon-ec2 amazon-cloudfront


【解决方案1】:

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

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

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

一旦源由其各自的域名(不是您的站点的域名,而是专门用于相关资源的域名)指定,您定义 CloudFront path patterns 以选择哪个源将接收每个模式的请求(例如/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 甚至可以使用来自其他供应商的服务——比如谷歌云存储桶——作为内容来源,如果这是你需要做的事情,无论出于何种原因......因为这些是可通过公共 Internet 上的 HTTP 访问。)

【讨论】:

  • 是的,多亏了这个,我想通了。但是,我遇到了另一个需要帮助的问题。我有一个使用自定义路由的角度应用程序,因此当返回 404 响应以将用户重定向到 /app/index.html 页面时,我基本上设置了一个自定义错误页面。但是问题是,如果/api/* 下的某些内容返回 404,我不想将用户重定向到有角度的页面。在这种情况下,如何对错误页面使用基于路径的路由。再次非常感谢您的上述意见。
  • @MilindaD 我认为最干净的解决方案可能是 Lambda@Edge 原始响应触发器在默认的适当缓存行为上拦截 404 错误并根据需要转换响应......然后您可以删除自定义CloudFront 配置中的错误文档。或者,S3 可以支持配置以生成对前缀的重定向响应,例如 /#//#!/ 如果适合您。这似乎比盲目地将每个 404 视为有效并返回相同的内容在语义上正确得多。见serverfault.com/a/633571/153161
  • @Michael-sqlbot 如果我们想在流程中添加授权怎么办? Cancoufront 可以与 AWS Cognito 集成以保护 web 应用程序吗?这是一个详细的问题:stackoverflow.com/questions/70449251/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2020-07-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
相关资源
最近更新 更多