所以,为了使此功能正常工作,您需要一个可解析的DNS主机名。举一个快速的例子,我编辑了/etc/hosts
文件,并添加了以下条目:
因此,您需要一个可解析的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
,那么您实际上要说的是侦听每个可用的网络接口
。这可能会导致安全漏洞,因为它可能会绑定到您不想要的适配器;我在部署RoR应用程序时亲身经历过这种情况。
0.0.0.0/0
子网是一种非常高级的方式,可以说:这些都是我在这台计算机上拥有的所有网络接口
,而127.0.0.1
始终是本地专用接口。如果绑定到此,您就可以摆脱许多安全问题,其中一个问题是“黑客”试图在所有接口上附加侦听器,如果您没有非常严格的防火墙,则可能存在泄漏。
这不是一个规则,而只是一个最佳实践。
P.S.:代码是我从Modulus博客中提取的片段;如果我想尝试一些东西,它很快速。
0.0.0.0
是正确的选择... 我很好奇何时/为什么要在其他地方绑定服务器,因此问了这个问题 :) - Yibo Yang