【问题标题】:cannot get nodejs working on amazon ec2 instance无法让 nodejs 在亚马逊 ec2 实例上工作
【发布时间】:2025-12-29 22:05:11
【问题描述】:

过去 3-4 天我试图在亚马逊微型实例上运行 nodejs 服务器,但没有成功。

我学习了很多教程,但我无法让服务器正常工作(所以当它在浏览器中访问或在 powerShell 中 curl 并看到简单的 hello world 时)。

这是我尝试过的最后 3 个教程:

http://iconof.com/blog/how-to-install-setup-node-js-on-amazon-aws-ec2-complete-guide/ http://techprd.com/setup-node-js-web-server-on-amazon-ec2/ http://devblog.daniel.gs/2014/01/deploying-node-apps-on-aws-ec2-with.html

我试过 ubuntu/amazon linux。

我也关注了http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html,只是想看看一般流程是如何运作的,而且效果很好。

我达到了这样的地步:sudo node filename.js 并且服务器运行。

但是,当我尝试访问或卷曲它时。它不起作用。当我 ping 它时,它 ping 很好。

在亚马逊中,我将安全组设置为基本上允许这样的一切:

在 linux 中,我跟随:https://help.ubuntu.com/community/IptablesHowTo?action=show&redirect=Iptables 打开我试图监听的端口,但什么也没有。

当我输入:sudo service iptables status 我得到:

1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:1337:1347

2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:1338:1348

3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10000

请记住,我不是一个精通服务器的人。

任何帮助将不胜感激。

更新:要启动我的节点服务器,我使用 nodejs.org 中的基本代码:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

这正是我的文件的样子

【问题讨论】:

  • in amazon i set the security to basically allow everything 是什么意思?应用于该实例的安全组的设置是什么?
  • 发布更新我的安全组的样子
  • 你能在服务运行时从那台机器上 curl localhost 吗?如果不是,则该服务不起作用。如果是,则该端口可能不是列出的端口之一。
  • 打开两个putty终端,一个运行node js,另一个输入curl localhost:1337返回hello world
  • 酷。 “sudo iptables -L”报告什么?

标签: node.js curl amazon-web-services amazon-ec2 amazon-s3


【解决方案1】:

您没有提供足够的信息,但我将尝试概述一般故障排除技术。

  • 您的节点程序是否正在运行并为请求提供服务?进入 Ec2 框并执行curl -v localhost:8000(或任何您的节点端口)。它应该会输出您的应用程序。如果没有,你的 node.js 设置不正确。

  • 您的 nginx 正在运行吗?进入盒子并输入curl -v localhost。这将在您的端口 80 上查看。如果它没有代理到您的应用程序,则可能是 nginx 配置问题。

  • 你能通过 IP 地址到达盒子吗?在您的台式机/笔记本电脑上执行curl -v x.x.x.x,其中x.x.x.x 是您的EC2 公共IP 地址。如果挂起,则存在防火墙问题。

  • 您可以通过您的 DNS 访问该框吗? (假设你试图让 foo.com 指向它)试试curl -v http://foo.com/。如果这不起作用,您的 DNS 可能不正确。

但是,当我尝试访问或卷曲它时。它不起作用。

请更具体。

【讨论】:

  • 将按照您提出的顺序回答您的问题: 1. curl -v localhost:8000 吐出你好世界。 2.没有设置nginx它有一个问题但是不确定它与我正在尝试做的事情有什么关系。 3. 我用端口号尝试了公共 ip 和公共 DNS 都没有做任何事情
  • 访问是指在浏览器中使用带有端口号的公共 ip 或公共 DNS,当我尝试使用 powerShell 从我的电脑卷曲时,我 getcurl -v localhost