Node.js网站拒绝连接

我在Amazon EC2上有一个新的Ubuntu实例设置。 这个实例上有一个节点的Web服务器。 当我尝试打我的网站时,我的浏览器出现错误。 错误是:

Connect: Connection refused 

我已经确认我可以ping机器。 但是,当我在浏览器中inputhttp://[ipAddress]http://[ipAddress]:8080时,出现上述错误。 当我启动节点的Web服务器时,它说:

 Server listening on 8080 

我使用以下命令实现端口转发:

 iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 

我相信我使用以下命令适当地打开防火墙:

 iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT 

我卡住了。 我不知道为什么我会收到拒绝的连接。 我会真诚地感谢任何人可以提供的帮助或见解。 此时,我不确定这个消息是来自Ubuntu还是来自Node服务器。 除此之外,我不熟悉如何跟踪这个问题。

感谢您的帮助。 它对我意义重大。

您的服务器很可能不在[ipAddress]:8080上侦听[ipAddress]:8080很可能只在localhost:8080上侦听。 你可以使用netstat来检查你将需要configuration你的服务器来监听所有/适当的IP地址。 无疑如何做到这一点将在文档中。

你想填写serverAddress ,使其在正确的networking接口上侦听:

 http.createServer(function (req, rsp) () { ... }).listen(serverPort, serverAddress); 

还请确保Amazon EC2在pipe理控制台中有一个安全组连接到您的计算机实例,以允许在该端口上访问。 (这些安全组允许您configurationEC2防火墙。)

我与我的ExpressJS应用程序有完全相同的问题,这不是你的重新路由。 我砍了iptables和netstat很长一段时间,直到我意识到我有我的HOSTvariables在我的server.js文件设置为localhost 。 这是我的非工作代码:

 app.listen(PORT, 'localhost', function(err) { if (err) return console.log(err); console.log("Listening at http://localhost:%s", PORT); }); 

只需添加一个主机variables

 var HOST = 'actual_server_goes_here...'; 

然后这样做:

 app.listen(PORT, HOST, function(err) { if (err) return console.log(err); console.log("Listening at http://%s:%s", HOST, PORT); }); 

希望这可以帮助 :)

您需要使用您的私有IP才能收听。 实例的私有IP地址(如果实例有多个networking接口,则会列出多个IP地址)。 它在每个实例的EC2pipe理控制台中显示