最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

AWS ECS 服务发现 Cors 问题?

网站源码admin44浏览0评论

AWS ECS 服务发现 Cors 问题?

AWS ECS 服务发现 Cors 问题?

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

  1. 克隆

  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. 克隆

  7. 地形初始化

  8. 地形规划

  9. 地形应用

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

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

Access to XMLHttpRequest at 'api.example.terraform: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: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:3300/mysql
,我收到回复了。

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

这是前端回购:.vue#L29 我正在使用 Axios 发出请求。

回答如下:

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

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

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

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论