Node.js 站点拒绝连接

Node.js 站点拒绝连接

我在 Amazon EC2 上设置了一个全新的 Ubuntu 实例。此实例上有一个节点 Web 服务器。当我尝试访问我的网站时,我的浏览器中出现错误。错误如下:

Connect: Connection refused

我确认可以 ping 机器。但是当我在浏览器中输入http://[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 服务器。除此之外,我不知道如何追踪这个问题。

谢谢你的帮助。这对我意义重大。

答案1

您的服务器很可能没有监听,[ipAddress]:8080而可能只监听 localhost:8080。您可以使用以下命令进行检查网络状态您需要配置服务器以监听所有/适当的 IP 地址。毫无疑问,文档中会介绍如何执行此操作。

答案2

我的 ExpressJS 应用程序也遇到了同样的问题,这不是你的重新路由问题。我花了很长时间破解 iptables 和 netstat,直到我意识到我的 server.js 文件中的 HOST 变量设置为localhost。这是我的无效代码:

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

只需添加一个主机变量

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);
});

希望这可以帮助 :)

答案3

您想填写服务器地址使其在正确的网络接口上监听:

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

另外,请确保在 Amazon EC2 的管理控制台中有一个安全组附加到允许访问该端口的机器实例。(这些安全组允许您配置 EC2 防火墙。)

答案4

您需要使用您的私有 IP 来监听它。实例的私有 IP 地址(如果实例有多个网络接口,则列出多个 IP 地址)。它显示在 EC2 管理控制台中,每个实例

相关内容