AWS ECS 服务发现 Cors 问题?

问题描述 投票:0回答:2

我正在启用服务发现的情况下在 ECS 上实施全栈应用程序。该基础设施包括一个与 mysql RDS 数据库对话的后端和一个使用 VueJS 向 nodejs 后端发出请求的前端。当我从前端发出请求时,我遇到了一个 cors 问题。要重现这个问题:

  1. 克隆https://github.com/FIAF0624/backend-infra

  2. 地形初始化

  3. 地形规划

  4. 地形应用

  5. 当 mysql 实例启动并运行时,使用

    mysql -h <endpoint> -u admin -padmin123
    连接到数据库并运行以下查询:

    如果存在客户则删除数据库;

    创建数据库客户; 使用客户; DROP TABLE IF EXISTS 书籍;

    创建表格书籍( id int NOT NULL AUTO_INCREMENT, 名称 varchar(255) NOT NULL, 价格 int NOT NULL, 主键(id) );

    INSERT INTO books VALUES (1,'Basic Economics', 20),(2,'Harry Potter', 15),(3,'Physics', 17); 从书中选择*

  6. 克隆https://github.com/FIAF0624/frontend-infra

  7. 地形初始化

  8. 地形规划

  9. 地形应用

  10. 转到 ECS -> rolling-ls-cluster -> Tasks -> 在浏览器中输入公共 IP,然后单击按钮。

  11. 检查浏览器控制台(右键单击 -> 检查 -> 控制台),您将看到以下错误。

Access to XMLHttpRequest at 'api.example.terraform.com:3300/mysql' from origin 'http://<public-IP>' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome, https, chrome-untrusted.

GET api.example.terraform.com:3300/mysql net::ERR_FAILED
Uncaught (in promise) rt {message: 'Network Error', name: 'AxiosError', code: 'ERR_NETWORK', config: {…}, request: XMLHttpRequest, …}

但是,如果我创建一个 EC2 实例并使用

curl api.example.terraform.com:3300/mysql
,我收到回复了。

这是我的 NodeJS 后端:https://github.com/FIAF0624/backend/blob/main/server.js 并且我允许 cors 以及显式添加标头。安全组允许来自任何地方的所有流量。不知道为什么我会遇到这个 cors 问题。该应用程序在本地运行对我来说很好。我不确定问题到底出在哪里。任何帮助将不胜感激。

这是前端回购:https://github.com/FIAF0624/frontend/blob/a2e89010d3dfaa75caecfb8d656723abe2ff3456/src/components/Dashboard.vue#L29 我正在使用 Axios 发出请求。

node.js amazon-web-services cors amazon-ecs service-discovery
2个回答
0
投票

问题是前端不负责向后端发出请求。它只提供 Javascript、HTML 和 CSS。在这种情况下发出请求的是浏览器。因此,您的浏览器/笔记本电脑与后端所在的网络不在同一个网络上。这就是为什么您仍然可以从 EC2 服务器发出请求的原因。

解决方案:设置一个 VPN 服务器(OpenVPN 或 AWS VPN)来与您的 VPC 网络交互。然后提出请求,它应该可以工作。或者,如果您可以使用公共 DNS,请遵循 Matt 的解决方案。但请记住,并非每个 API 都将面向公众。

或者您也可以通过代理服务器重新路由请求,在您的情况下,代理服务器可以是已经驻留在同一网络中的 EC2 实例。


0
投票

jub0bs 是正确的。

尽管要考虑的另一件事是确保 CORS 也没有在 AWS 上的 ECS 配置中的某处设置。

因为如果发生这种情况,您的 CORS 设置将附加到 ECS 的 CORS 设置并导致未解决的 CORS 问题。

© www.soinside.com 2019 - 2024. All rights reserved.