当前位置:  开发笔记 > 编程语言 > 正文

如何在Node.js server.listen()中使用可选的hostname参数

如何解决《如何在Node.jsserver.listen()中使用可选的hostname参数》经验,为你挑选了1个好方法。

从我到目前为止在教程中读到的内容来看,可选hostname参数server.listen(port[, hostname][, backlog][, callback])始终是127.0.0.1(环回),0.0.0.0(监听每个可用的网络接口,默认选项),或者服务器可用的实际IP地址之一.其他一切都会给出一个Error: listen EADDRNOTAVAIL.那是全貌吗?(我相信主机名在技术上与IP不同......)

我无法从文档中找到太多关于它的内容......



1> weirdpanda..:

因此,您需要一个可解析的DNS主机名才能使用.有关快速示例,我编辑了该/etc/hosts文件以包含以下条目:

...
127.0.0.1 MyTestDnsHostName.local

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

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,你基本上说的是Listen to every available network interface there is.这可能会带来安全漏洞,因为它可能绑定到您不希望它的适配器; 在部署RoR应用程序时,我已经掌握了这方面的第一手经验.

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

这不是一个规则,而只是一种最佳实践.

PS:代码是我从Modulus的博客中摘取的片段; 如果我想尝试一下,它会很快.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有