【问题标题】:Node.js server only listening on ipv6Node.js 服务器只监听 ipv6
【发布时间】:2018-05-27 14:19:10
【问题描述】:

我在端口 5403 上运行 node.js 服务器。我可以远程登录到此端口上的私有 ip,但不能远程登录到同一端口上的公共 ip。

我认为这是因为 node.js 只监听 ipv6。这是

的结果

netstat -tpln

(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
PID/Program name
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      
-
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      
-
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      
-
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      
-
tcp6       0      0 :::5611                 :::*                    LISTEN      
25715/node
tcp6       0      0 :::22                   :::*                    LISTEN      
-
tcp6       0      0 ::1:631                 :::*                    LISTEN      
-
tcp6       0      0 :::5403                 :::*                    LISTEN      
25709/node

如何让节点服务器监听 ipv4

【问题讨论】:

  • 你的配置是什么?这是输出,但输入在哪里? :)

标签: node.js ubuntu ipv6 ipv4 netstat


【解决方案1】:

调用listen() 时需要指定IPV4 地址,http 模块也有同样的问题。如果我使用这个:

var http = require('http');

var server = http.createServer(function(request, response) {
...
});

server.listen(13882, function() { });

它只监听 IPV6,从 netstat 输出中可以看到:

$ netstat -lntp
Proto  Recv-Q  Send-Q  Local Address  Foreign Address  State
tcp6        0       0  :::13882       :::*             LISTEN

但是,如果我这样指定 IPV4 地址:

var http = require('http');

var server = http.createServer(function(request, response) {
...
});

server.listen(13882, "0.0.0.0", function() { });

netstat 将报告服务器正在侦听 IPV4:

$ netstat -lntp
Proto  Recv-Q  Send-Q  Local Address     Foreign Address  State
tcp         0       0  0 0.0.0.0:13882   0 0.0.0.0:13882  LISTEN

我使用的是 Ubuntu 16.04 和 npm 5.3.0。

HTH

【讨论】:

  • 在 ipv6 和 ipv4 上运行怎么样?
  • 根据nodejs.org/api/net.html#net_server_listen_options_callback 默认情况下,listen() 现在可以在 ipv4 和 ipv6 上工作。我刚刚通过一个简单的server.listen(13883, function() { }); 对其进行了测试,虽然netstat 只报告监听tcp6,但我也可以使用127.0.0.1192.168.*.* 等ipv4 地址进行连接。我现在使用的是 Ubuntu 18.04 和节点 v8.12.0
  • 这仅在您使用:: 时有效。当您指定 0.0.0.0::1127.0.0.1 时,它不起作用。我想知道是否可以同时将网络服务器绑定到::1127.0.0.1
猜你喜欢
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多