【发布时间】:2020-05-01 16:19:45
【问题描述】:
我将一个网站转移到 AWS,该网站在一台服务器上具有 Angular,在另一台服务器上具有 Nodejs/Express,并在 RDB 中使用 PostgreSQL 数据库。这很好用并且目前正在运行,但对可扩展性和可用性来说不是很好。
因此,我已将 Angular 从通过 CloudFront 访问并使用 WebHook 更新的 S3 存储桶移到我的 GitHub 存储库中。这一切似乎都很好。
我有使用 Elastic Beanstalk 的 Nodejs/Express,并再次使用 WebHook,它从 GitHub 存储库更新。仍然有一些项目需要解决这个部署,但我认为它们将是次要的(这意味着它们稍后会咬我)。
我似乎想不通的是一种允许 Angular 对 Elastic Beanstalk 中的负载均衡器进行 API 调用的方法。
我还使用 proxy.config.json 吗?如果是这样,我指向什么?我尝试在 Route 53 中为 api.myapp.com 创建 CNAME 记录,指向负载均衡器 DNS 的值。这似乎不起作用。
我是否使用 AWS API Gateway。我在这里尝试了一些不同的东西,但似乎无法让它工作。唯一似乎可行的事情是需要我定义每个 API,如果可能的话,这将是我最后的手段。
这是不能做的事吗?
我已经阅读了很多类似问题的文章,但似乎没有一篇足够接近给我一个答案。也许我只是看错了。任何帮助将不胜感激。
已编辑
在过去几天追了很多松鼠之后,我想我已经把它缩小到 CloudFront 的配置问题。
- 我在 Route 53 中有一条将我的 CloudFront 指向为“dev.mydomain.com”的路由,效果很好。
- 我在 Route 53 中有一条路由指向我的 Elastic Beanstalk 负载均衡器“api.mydomain.com”。
- 我可以通过在浏览器中输入 URL 来拨打电话,例如“https://api.mydomain.com/api/getInfo”,它会返回信息以及 cors 标头。当我让应用程序进行与 CloudFront 从 S3 存储桶提供服务的相同调用时,我得到“对来自源 'https://dev.mydomain.com' 的 XMLHttpRequest 的访问已被 CORS 策略阻止:没有'访问控制-Allow-Origin' 标头出现在请求的资源上。”果然,响应标头中没有任何 cors 标头。
我发现了几篇似乎可以解决此问题的文章,但它们没有奏效(或者我执行不正确)。我试图创造一个起源,我试图创造一种行为。到目前为止没有任何效果。
如果有人处理过这个问题,或者知道有一篇文章对我有帮助,我将不胜感激。
【问题讨论】:
标签: node.js amazon-web-services amazon-s3 amazon-elastic-beanstalk amazon-cloudfront