【问题标题】:Can't connect to a node.js server on my VPS无法连接到我的 VPS 上的 node.js 服务器
【发布时间】:2017-04-23 16:31:47
【问题描述】:

嗯,我希望这个问题不是愚蠢的或重复的。我保证我已经研究和测试了很多。

我的 VPS 上有一个服务器,代码如下:

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(8080);

io.on('connection', function(socket) {
  socket.on('hello', function() {
    console.log('Hello received');
  }
}

还有一个客户端在另一台机器上:

<script>
  var socket = io.connect('http://[VPS Public IP]:8080');
  io.emit('hello');
</script>

这在使用私有 IP 地址和同一个网络时有效。使用公共 IP 时,这不起作用。知道为什么会这样吗?

谢谢。

【问题讨论】:

  • VPS 上是否有防火墙阻止该端口?节点是否绑定到 0.0.0.0?
  • 这是一个运行 Ubuntu 16.04 的 VPS。我试图禁用 ufw(Ubuntu 的默认防火墙),但我的 VPS 没有安装它,所以我想没有防火墙。我对吗?我已经用 server.listen(8080, "0.0.0.0") 替换了 server.listen(8080) 并且没有任何变化。
  • 通过命令telnet VPS_Public_IP 8080验证连通性
  • telnet 连接成功。

标签: javascript node.js socket.io vps


【解决方案1】:

好的,经过更多测试后,我已经解决了自己的问题。

我意识到 VPS 公共 IP (X.X.X.209) 与他们使用串行控制台工具通过 SSH 连接的 IP 地址 (X.X.X.221) 不同。

当我的真实公共 IP 是第一个时,我正在使用第二个 IP 地址 X.X.X.221。一旦我使用了X.X.X.209,它就可以毫无问题地连接了。

感谢您的所有 cmets 和想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2019-09-29
    • 1970-01-01
    相关资源
    最近更新 更多