我并不是网络方面最博学的人,但是我可以这么说...
我使用 NodeJS 创建了一个应用程序,我想和家人一起在我的 LAN 上测试该应用程序。该应用程序监听端口上的1337
连接,我可以通过自己的 PC 键入localhost:1337
,192.168.0.3:1337
甚至http://joel-pc:1337/
在浏览器的地址栏中输入 来访问该应用程序。
我还将运行 apache 和 NodeJS,只要连接到同一个网络,我就可以通过在浏览器的地址栏中输入192.168.0.3
或来访问它。http://joel-pc/
现在,奇怪的是,如果我停止 apache 服务,将我的节点应用程序更改为监听端口80
(http),而不是1337
,则可以通过在我的 PC 上键入localhost
,192.168.0.3
甚至http://joel-pc
在浏览器的地址栏中访问它。但是,除了我自己的 PC 之外,我仍然无法在我的网络上的任何其他 PC 上访问 NodeJS。
我尝试在 Windows 7 中创建出站规则以允许访问端口 1337,但我仍然无法在任何其他 PC 上访问我的 NodeJS 服务器,即使它正在监听端口 80。我是不是明显遗漏了什么?
答案1
很可能您的节点应用程序绑定到环回 IP 地址127.0.0.1
而不是“所有 IP”,0.0.0.0
因为这是 的默认行为listen
。在您的调用中同时指定端口和 IP server.listen(80, '0.0.0.0');
,然后重试。
答案2
获取当前本地网络 IP 并运行 http 服务器,如下所示:
server.listen(80, 'current_local_ip');
答案3
在 Windows PC 上执行以下操作对我有用。尝试以下操作:打开
控制面板\系统和安全\Windows Defender 防火墙\允许的应用程序
接下来在列表中查找 node.js,然后单击更改设置>确保选中私人访问,然后单击确定。
答案4
我找到了一个很好的解决方案。我没有进行所有配置(设置防火墙、转发端口等),而是使用了本地隧道这是一个用于在互联网上公开本地节点服务器的实用程序。您可以将其用于开发、测试、共享目的,但不要将其用于生产。
首先,您必须安装 localtunnel,如下所示:
$npm install -g localtunnel
之后配置你的节点应用程序,以便你的节点服务器在本地主机上运行。例如:
server.listen(3000, function () {
console.log('Listening to port: ' + port);
});
记下你的端口就我的情况来说3000,然后启动你的节点服务器。
打开另一个终端并输入以下命令来运行localtunnel。
$lt --port 3000
此后,您将在终端中获得一个 URL,可用于开发/测试目的。此 URL 将在 Internet 上可用,因此您也可以与其他人共享。只要您的 localtunnel 正在运行,其他人就可以访问您的本地节点服务器。
要获得更多配置选项/帮助,您可以查看文档: https://www.npmjs.com/package/localtunnel