因此,您需要一个可解析的 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 应用程序时对此有过第一手经验。
The 0.0.0.0/0
子网是一种非常奇特的表达方式:these are all the network interfaces I have on this computer
, 同时127.0.0.1
始终是仅限本地的接口。如果你将它绑定到此,你就可以消除很多安全问题。其中之一可能是“黑客”尝试在所有接口上附加侦听器,如果您没有非常严格的防火墙,则可能会出现泄漏。
这不是一个rule如此,但这只是最佳实践。
P.S.:该代码是我从 Modulus 博客中摘取的一个片段;如果我想尝试一些东西,那很快。