无法通过互联网访问 Node.JS

Can't Access Node.JS over internet

我正在尝试通过 Internet 访问一个简单的节点。js/express 应用程序,但我终究无法弄清楚为什么它不起作用。我可以使用 http://localhost:3000 and http://192.168.x.x:3000 访问它,但不能使用我的外部 IP 地址。

端口 3000 在我的路由器上打开(使用端口在线端口检查工具仔细检查),并且我在防火墙中添加了一条规则以允许该端口 (Windows 10)。

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, "0.0.0.0")

netstat 好像提示 3000 端口是允许通过防火墙的,对吧?

C:\WINDOWS\system32>netstat -n -a

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:3000            0.0.0.0:0              LISTENING

您需要转发该端口或建立隧道才能在 Internet 上使用它。默认情况下,端口被阻止。问题不是服务器没有监听问题是从外部无法发现它。

  • 要转发端口,将转发规则添加到您的路由器[More info]
  • 对于隧道,您可以使用 ngrok

通过这样做,您可以连接到位于 http://<your_external_ip>:<forwarded_port>

的服务器

我终于明白了!这与我在不支持发夹 (see point 2 in this Whosebug answer) 的路由器上测试 LAN 内部连接有关。只需在局域网外的设备上访问应用程序即可。