从 Amplify 服务向 EC2 机器发送 GET 请求

Send GET request from Amplify service to EC2 machine

<我是一个真正的新手,所以如果我使用的术语不正确,我很抱歉。 >

大家好!

我正在尝试部署我的网站,我将前端文件放在为我提供 HTTPS url 的 Amplify 应用程序中。 我的目标是将我的后端代码加载到 EC2 ubuntu 机器并通过 pm2 加载到 运行 它。 我很难理解如何去做,我正在用 nodejs 编写后端代码并且我正在使用 express 框架。 当我在本地开发时,这一切 运行 都很完美。 我的后端代码:

app.get('/db', (req,res) => {
let ddb = new AWS.DynamoDB({ apiVersion: "2012-08-10" });
const params = {
TableName: "blablabla",
};
let itemObj = [];
ddb.scan(params, function (err, data) {
if (err) {
    console.log("Error", err);
} else {
    console.log("Success", data);
    data.Items.forEach(function (element, index, array) {
    itemObj.push(data.Items);
    res.status(200).json(itemObj);
    });
}
})

相关前端代码:

function getData(username){
var xmlhttp = new XMLHttpRequest();
  var url = "http://localhost/db";
  xmlhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) { //request completed
        result = JSON.parse(this.responseText);
    blablabla
          }
  };
  xmlhttp.open("GET", url, true); 
  xmlhttp.send(); 
}

当我通过我的计算机使用本地主机 url 和 运行 服务器时 (npm start server..) 我确实得到了我在放大服务上寻找的数据。 但是 当我使用 EC2 机器的弹性 IP 地址时,我得到一个错误:" was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint, This request has been blocked "

有什么办法可以允许这类请求吗? 我是否使用了 EC2 机器的正确 IP? 在我看来,如果 EC2 为我提供了一个 HTTPS 地址,它就可以正常工作,我是对的还是与它无关? 提前致谢。

它可以在您的本地计算机上运行,​​因为您在本地主机上没有 SSL 证书,所以您的前端不会通过安全连接加载。当您 运行 来自 Amplify 的前端时,您正在通过 SSL 连接到 Amplify 域名(我预计 URL 类似于 https://master.randomalphanumericstring.amplifyapp.com)。因此,当该页面试图与您的 EC2 实例建立不安全的连接时,您的浏览器会抱怨。

您可以通过更改浏览器设置以允许混合内容来解决此问题。在Chrome中,是设置->站点设置->不安全内容->添加站点。但这只是开发的一种解决方法,显然不适用于生产。

您不能向 IP 地址发出 HTTPS 请求。 SSL 证书必须与域名相关联。让您的后端依赖于特定的 IP 地址也不是一个非常可靠的解决方案。您有几个选项可以解决这个问题:

  1. 生成 SSL 证书并将其安装在您的 EC2 实例上。您不能将 AWS Certificate Manager 与 EC2 一起使用,因此您需要从 letsencrypt 或其他来源获取证书。自签名行不通,它必须被浏览器信任。当然,您需要一个注册域名。

  2. 添加带有安全侦听器的应用程序负载均衡器和通过 ACM 颁发的证书,将请求定向到您的 EC2 实例。同样,您需要有一个可以与证书一起使用的注册域。

  3. 通过 Amplify 部署您的后端。这将为 API 端点提供 awsamazon.com 域中的安全连接。

还有许多其他方法可以创建具有安全连接的应用程序后端,但这些应该可以帮助您入门。