node.js - AWS Lightsail 和 EC2 G3 是否兼容导出图像?

标签 node.js amazon-ec2 httprequest amazon-ami amazon-lightsail

我将 Lightsail 镜像导出到 EC2 g2.2xlarge 和 g2.8xlarge,它运行没有问题,但在 g3.8xlarge 实例上尝试相同操作后,无法从外部访问它。我使用另一个 Lightsail 镜像作为主主机,使用 EC2 实例作为计算服务器。当我记录 http 请求的 on("error",callback) 输出时,它会显示

{ Error: connect ECONNREFUSED ::ffff:x.y.z.w:80
    at Object._errnoException (util.js:1022:11)
    at _exceptionWithHostPort (util.js:1044:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1198:14)
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  address: '::ffff:x.y.z.w',
  port: 80 }

我试图解决的问题:

  • 禁用任何 Apache Tomcat:它显示已禁用(我猜是从图像导出中得出的)
  • 预路由从 80 到 1024(Nodejs 应用程序监听)
  • 在尝试发出任何 http 请求之前,等待 EC2 实例的状态变为 2/2 检查(通过 JavaScript 使用 aws sdk)。
  • 附加一个允许 1024 和 80 端口使用的安全组,并在入站和出站规则上设置为任意位置(不是生产,只是测试)。
  • SSH 连接正常,我可以从 SSH channel 安装应用程序,然后为了自动化,我获取其“镜像”并终止实例,主服务器从该镜像创建新实例。(g2 实例没问题)。物理上没有问题,但某些东西阻止了 HTTP 请求。

我执行以下步骤将 Nodejs 服务移动到应用程序:

  • 在 Nodejs 中开发一些模块
  • 拍摄快照
  • 将快照导出到 ec2(等待完成)
  • 打开 ec2 控制台,选择导出的 AMI
  • 点击启动(选择 g2 实例、安全组、..、生成 key 、使用 ssh 登录)
  • 安装必要的软件(使用g2、p2、..实例的资源)
  • 获取完整安装环境的新镜像(通过分离 ssh 以确保这样做不会丢失数据)
  • 使用 AWS SDK (Javascript) 中的 AMI 代码创建一个新实例,等待其运行,等待检查其两个状态,然后运行应用程序。
  • g2 镜像用于创建 g2 实例,g3 镜像用于创建 g3 实例。

但仅适用于 g2 实例。

我还需要尝试什么?为什么这在 g2 实例上工作正常,但在 g3 实例上却不行?

  • Ubuntu 18.04(从普通 Ubuntu 开始,但仍称为 Amazon Ubuntu?)
  • Nodejs 8(在 1024 端口上运行) --- Lightsail 主机使用expressjs 处理传入请求,使用http 处理传出请求。 EC2 实例也是如此。

如果这有帮助:

  • EC2 实例可以向 Lightsail 实例发出 http 请求。
  • Lightsail 实例可以通过express.js 监听来获取此信息。
  • Lightsail 对 EC2 执行的第一个 http 请求会导致上述错误输出。 (g3 实例)
  • 在 Lightsail + g2 实例上,http 请求和expressjs 监听都可以在两台服务器上运行。
  • EC2 实例是共享的,而不是专用的。
  • 对于请求,我使用 HTTP POST 并为其提供 json 对象。

也许http请求+expressjs监听设计也是错误的?

最佳答案

在其他服务器尝试对其进行 POST 操作之前,通过从控制台切换源目标检查选项解决了问题。

默认值为 true,这导致了“问题”(我以为存在错误,但似乎我错过了它的一个功能)。

关于node.js - AWS Lightsail 和 EC2 G3 是否兼容导出图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54357208/

相关文章:

inno-setup - 发送 HTTP 请求

node.js - 使用 async.js 的异步树遍历

node.js - 如何将winston日志路径设置为项目本地文件夹

python - 如何在 AWS 上创建临时安全凭证

amazon-ec2 - 使用 Terraform 进行配置时,代码如何获取对机器 ID 的引用(例如数据库机器地址)

mysql - aws - ec2 - mysql - 实例停止,重启 - 其他用户密码已更改

javascript - $http.get 请求仅在首页加载时成功

node.js - 不存在 'Access-Control-Allow-Origin' header .. Angular 7 和 Express

ios - swift ios http请求拉取数据并仅显示数据选定的数据值

iOS HTTP 请求被调用两次