9

我有一个运行良好的 Node.JS 服务器localhost。现在我希望它可以从我的机器托管的互联网上访问。我的公共 IP 地址(Google 告诉我我拥有的那个)似乎不是“可访问的”:

https.createServer({
    key: privateKey,
    cert: certificate
}, server).listen(80, '86.151.23.17');

失败并出现以下 Node.JS 错误:

Error: listen EADDRNOTAVAIL
    at errnoException (net.js:770:11)
    at Server._listen2 (net.js:893:19)
    at listen (net.js:937:10)
    at Server.listen (net.js:994:9)
    at dns.js:71:18
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

如何将我的 Node.JS 服务器发布到我的公共 IP 地址?

[注意:我没有运行其他网络服务器。另外,我尝试了这里建议的各种不同的端口。]

4

3 回答 3

12

您很可能在路由器后面,因此您的公共 IP 在路由器本身以外的任何地方都不可用。您需要做的是监听您的私有 IP(通常在 192.168.* 范围内)并在路由器上设置端口转发。

如果您在 Linux 上,您还需要使用大于 1024 的端口而不是 80,这样您就不必以 root 身份运行节点。设置端口转发时,您可以简单地将端口 80 转发到节点服务器运行的任何端口。

于 2013-01-12T12:39:38.853 回答
2

您的应用程序应该侦听其他 IP 地址,例如

app.listen(3000,'0.0.0.0');

要不就

app.listen(3000);

然后您必须在调制解调器中打开端口转发。像这样http://www.dlink.com/uk/en/support/faq/routers/wireless-routers/dkt-series/how-do-i-open-up-ports-to-my-computer-port-在此路由器上转发

最后,您可以在这里https://whatismyipaddress.com/的 IP 地址看到您的应用程序

于 2017-07-05T10:13:49.150 回答
2
const http = require("http");
const hostname = '0.0.0.0';
const port = 80;

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

使用 0.0.0.0 将开始在我测试过的公共互联网上列出。

我遇到过 ISP 给定的路由器拦截默认 80 和 443 端口的情况。即使端口是开放的。所以最好先使用 8080 等端口检查服务器。

并且还将端口转发配置为静态本地地址(ipconfig /all 假设您的主机是 Windows),然后使用主机的 MAC 地址将该 IP 地址分配给您的主机。

为了更好的体验,如果您没有静态IP,可以随时使用noip.com动态域名访问您的服务器(无需知道IP地址)。

于 2019-03-09T11:47:04.223 回答