gpt4 book ai didi

node.js - 如何在 Node.js server.listen() 中使用可选的主机名参数

转载 作者:搜寻专家 更新时间:2023-10-31 22:37:46 24 4
gpt4 key购买 nike

从目前为止我在教程中读到的内容来看,server.listen(port[, hostname][, backlog][, callback]) 的可选 hostname 参数 始终是 127.0.0.1(环​​回)、0.0.0.0(listen on every available network interface, the default option),或者服务器可用的实际 IP 地址之一。其他一切都会给出一个 Error: listen EADDRNOTAVAIL。是全貌吗? (我相信主机名在技术上与 IP 不同......)

我无法从 doc 中找到太多关于它的信息...

最佳答案

因此,您需要一个可解析的 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 意味着它是可解析的但不可用;现在,为了能够绑定(bind)到它,它也应该是可绑定(bind)的(可用的)。

您可以执行 lsof -i TCP 来检查它的绑定(bind)位置。

但是,我不明白为什么必须在别处绑定(bind)服务器;绑定(bind)到环回是最佳实践。


是的,所以这实际上是一个安全漏洞;如果您将它绑定(bind)到所有可用接口(interface) 0.0.0.0,您实际上是在说监听每个可用的网络接口(interface)。这可能会造成安全漏洞,因为它可能会绑定(bind)到您不想要的适配器;在部署 RoR 应用程序时,我有过这方面的第一手经验。

0.0.0.0/0 子网是一种非常奇特的说法:这些是我在这台计算机上拥有的所有网络接口(interface),而 127.0. 0.1 始终是本地接口(interface)。如果你将它绑定(bind)到这个,你就摆脱了很多安全问题。其中之一可能是“黑客”试图在所有接口(interface)上附加一个监听器,如果您没有非常严格的防火墙,则可能存在泄漏。

这不是规则,而只是最佳实践。

P.S.:该代码是我从 Modulus 的博客中摘录的片段;如果我想尝试一些东西,它很快。

关于node.js - 如何在 Node.js server.listen() 中使用可选的主机名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34715797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com