在AWS中使用相同的域名进行前端和后端部署

时间:2019-06-05 11:38:22

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

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

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

2 个答案:

答案 0 :(得分:3)

我制作了下图,显示了该请求将流经的片段:

Request flow

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

记住创建一个新的原点(“ Origins and Origin Groups”选项卡),但还要创建一个新的行为(“ Behaviors”选项卡):使用预期的“ Path Param”(您的应用程序也应将此作为BasePath)并注意“优先级”(默认值必须始终是最后一个)。

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

CloudFront example behaviors

答案 1 :(得分:1)

对此问题有多种解决方案。

您可能有www.example.com指向S3存储桶,而api.example.com则指向后端。

另一种解决方案是使用CloudFront并将其配置为多个来源:一个用于您的前端(S3),一个用于您的后端(自定义来源,API网关或应用程序负载平衡器)。然后,您将有一种特定的行为,例如/api/*为您的后端服务。该解决方案的优势在于,在您的前端和后端都有CDN,并且避免了前端的CORS请求(以及CloudFront提供的更多功能)。