如何在Node.js server.listen()

时间:2016-01-11 07:00:19

标签: node.js server ip host

从我到目前为止在教程中读到的内容来看,hostname的{​​{1}}参数始终为server.listen(port[, hostname][, backlog][, callback])(环回),127.0.0.1({{3 (),或服务器可用的实际IP地址之一。其他一切都会给0.0.0.0。那是全貌吗? (我认为主机名在技术上与IP不同......)

我无法从listen on every available network interface, the default option ...

中找到太多关于它的内容

1 个答案:

答案 0 :(得分:10)

因此,您需要一个可解析的DNS主机名才能生效。有关快速示例,我编辑了TypeSpec.Builder.addSuperinterface()文件以包含以下条目:

/etc/hosts

然后我用旧的... 127.0.0.1 MyTestDnsHostName.local 刷新了解析器缓存,并在一个简单的Node.js服务器中使用了下面的代码。

dscacheutil -flushcache

确实有效。

错误var http = require('http') , PORT = 8080; function handleRequest( request, response ){ response.end( 'It Works!' ); } var server = http.createServer( handleRequest ); server.listen( PORT, "MyTestDnsHostName.local", 34, function(){ console.log( "Server listening on port:%s", PORT ); }); 表示它可解析但不可用;现在,为了能够绑定它,它也应该是可绑定的(可用的)。

您可以EADDRNOTAVAIL检查绑定的位置。

但是,我不明白为什么你必须将服务器绑定到其他地方;绑定到环回是最佳实践。

是的,所以它实际上是一个安全漏洞;如果将其绑定到所有可用接口lsof -i TCP,那么您实际上所说的是0.0.0.0。这可能会带来安全漏洞,因为它可能会绑定到您不想要它的适配器上;在部署RoR应用程序时,我已经掌握了这方面的第一手经验。

Listen to every available network interface there is子网是一种非常奇特的说法:0.0.0.0/0,而these are all the network interfaces I have on this computer始终是本地接口。如果将其绑定到此,则可以解决相当多的安全问题。其中一个可以是"黑客"尝试在所有接口上附加一个监听器,如果你没有一个非常严格的防火墙,在某个地方或另一个地方,可能会出现泄漏。

这不是规则,而只是一种最佳做法。

P.S。:代码是我从Modulus'博客;如果我想尝试一下,它会很快。