基于路径/路由的 CloudFront 多站点

CloudFront multi site based on paths / routes

现有应用程序

我在 S3 和 CloudFront 上托管了一个网站。 API 托管在 ECS 上,并由 CloudFront 通过 /api/* 行为提供服务。为了处理手动输入的路由,我将错误页面 404 和 403 配置为在默认行为上路由到 /index.html。

URL         -> CF -> S3 (default origin)
URL/api/**  -> CF -> LB -> ECS+Fargate

要求

我想做的是在指向新 S3 存储桶(源 3)的新路径 /admin 下托管 Admin 站点。

URL/admin    -> CF -> S3 (Origin 3)

问题

/admin 路径上的所有流量都属于错误页面,并被路由到默认来源。

我检查过的东西:

  1. 没有冲突的路径
  2. 已清除缓存
  3. S3 配置在 Default Origin Bucket 和 Origin 3 Bucket 上完全相同

我在删除错误页面配置时找到了解决方案。删除此配置后,出现 Access Denied 错误。当实际上访问权限不存在或对象不存在时,这是错误。因此,CloudFront 似乎无法访问 S3 存储桶上的文件。

解决方案是 /admin/ 路径需要 s3 中的 admin 文件夹,以便两个路径相互映射。当我将我的文件移动到正确文件夹中的第二个 S3 存储桶中时,一切都开始工作了。

这是托管 2 个站点的好方法,它们可以彼此共享 Cookie 和 FrontEnd 上下文,因为它们都在同一域下。您也不需要为此管理 CORS。