【问题标题】:Send GET request from Amplify service to EC2 machine从 Amplify 服务向 EC2 机器发送 GET 请求
【发布时间】:2021-08-28 18:43:04
【问题描述】:

大家好!

我正在尝试部署我的网站,我将我的前端文件放在 Amplify 应用程序中,该应用程序为我提供了一个 HTTPS 网址。 我的目标是将我的后端代码加载到 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(); 
}

当我使用 localhost url 并通过我的计算机 (npm start server..) 运行服务器时,我确实得到了我在放大服务上寻找的数据。 但是当我使用 EC2 机器的弹性 IP 地址时出现错误:“通过 HTTPS 加载,但请求了不安全的 XMLHttpRequest 端点,此请求已被阻止”

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

【问题讨论】:

    标签: node.js express amazon-ec2 deployment aws-amplify


    【解决方案1】:

    它可以在您的本地计算机上运行,​​因为您在 localhost 上没有 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 部署您的后端。这将在 awsamazon.com 域中为 API 端点提供安全连接。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      相关资源
      最近更新 更多