我的 Mac mini 在端口 8000 上运行着一个 nodejs 服务器。在 Mac 上,我可以通过 127.0.0.1:8000/something 访问它。我得到了一个“hello world”类型的响应。
在同一个网络上,从另一台机器,我无法在 Mac 上访问此服务器。我遇到了超时问题。我一直在绞尽脑汁试图了解原因。
我在本地网络上检查机器。例如 192.168.1.7:8000应该从另一台机器解析到该机器和端口。超时。
我有一个 NAS 管理页面,位于 192.168.1.200:5000(抱歉之前的拼写错误),它解析得很好。端口 5000 从路由器转发到 NAS。
我为 nodejs 设置了防火墙规则(在路由器上),设置方式与为 NAS 设置的方式完全相同。NAS 可通过路由器规则和 no-ip 动态 DNS 映射在我的网络外部使用。nodejs 服务器以相同的方式转发。没有成功,超时。
有什么想法吗?我的 Mac 上没有防火墙(我可以检测到)。我可以看到服务器在 Mac 上监听 8000。它在本地工作。
我在这里做错了什么?
更新问题的答案。
谢谢大家的反馈,以下是你们问题的答案。
来自 netstat 的输出。
netstat -anp tcp | grep 8000
tcp4 0 0 *.8000 *.* LISTEN
我没有运行 mac 防火墙(至少在系统设置中没有)。我看过一些关于 IPFW 的帖子,但我不知道那是什么。
在 Mac 上,当我点击 192.168.1.7:8000 时,我得到:
Hello World
我对 nodejs 的理解是,我只是将它“绑定”到一个端口。以下是代码,直接取自他们的示例。
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');
答案1
我也有类似的问题。
我发现通过更改防火墙选项(甚至完全禁用防火墙)来启用 MAC OS X 外部的节点访问是没有帮助的,至少在我的情况下不起作用。
我的解决方案是更改与node.js服务器绑定的主机名:
- 使用“0.0.0.0”作为主机名以允许从外部访问
- 仅使用本地访问的“localhost”
我猜测“localhost”以某种方式用作默认值,希望这个提示对其他人有所帮助。
干杯
答案2
我的机器目前配置如下:
- 防火墙已关闭-我位于锁定的硬件路由器后面。
- 系统偏好设置中的所有共享均已关闭。
- 我有一个静态 IP 地址(网络首选项:“使用 DHCP 和手动地址”)。
- 我的服务器仍然一样,它在端口 8000 上运行。
现在,我能够使用我的无 IP 域从 LAN 内部和外部访问它。我个人认为这是静态寻址问题 - 虽然我并不是 100% 确定。
答案3
我仍然不确定是否有合适的解决方案,但为了使其工作,我只是这样做了,
- 启动 Mac OSX 默认 Web 服务器,然后在 index.html 中,
- 在其中添加一个重定向代码,它将指向您的节点 js 端口,您也可以从外部 LAN 系统访问该端口。
实际上,当您托管它时,情况并非如此,因此您可以采用上述方法,并且仍然可以不受阻碍地进行操作,