在 aws 中为前端和后端部署使用相同的域名

Noo*_*ber 12 amazon-s3 amazon-ec2 amazon-web-services

我正在尝试在 aws 上部署我的 angular 应用程序和 nodejs 服务器。为了部署 angular 应用程序,我使用了s3存储桶并启用了静态网站托管。要部署nodejs,我正在使用ec2. 我选择将服务器和角度前端分开。

我想知道这将如何提供给外界。我已经购买了一个域名,比如 www.example.com。我附加了一个 s3 存储桶,因此在启动 www.example.com 后,我可以看到我的 angular 应用程序。但我也想为我的 nodejs 服务器使用相同的域,因为我的 angular 应用程序正在对 nodejs 服务器进行 API 调用。我需要为我的后端服务器购买不同的域吗?在我的本地开发中,我只是在 localhost:4200 上运行我的前端,在 localhost:3000 上运行 nodje。但我不确定它如何在云上工作。

jog*_*old 12

这个问题有多种解决方案。

您可以www.example.com指向您的 S3 存储桶并api.example.com指向您的后端。

另一种解决方案是使用CloudFront并为其配置多个源:一个用于前端 (S3),一个用于后端(自定义源、API 网关或应用程序负载均衡器)。然后你会有一个特定的行为,比如/api/*为你的后端服务。此解决方案的优点是在您的前端和后端都拥有 CDN 并避免前端的 CORS 请求(+ CloudFront 提供的更多功能)。


Fra*_*oso 6

我制作了下图,显示了此请求将流经的部分:

请求流

正如@jogold 所说,关键是 CloudFront,它将重定向到 FrontEnd 或 BackEnd(相同分布、多个来源、多个行为)

记住要创建一个新的源(“源和源组”选项卡),还要创建一个新行为(“行为”选项卡):使用预期的“路径参数”(您的应用程序也应该将此作为 BasePath)并注意“优先级”(默认值必须始终是最后一个)。

就我而言,BackEnd 的“PathParam”值为“/api/*”

CloudFront 示例行为