【发布时间】:2020-05-05 23:43:03
【问题描述】:
出于测试目的,我创建了一个 Google Cloud Compute Engine VM (Debian 9)。
我安装了 nodejs 并创建了一个小脚本。通过我的浏览器导航到 外部 IP 地址 时,没有任何反应。
const express = require('express')()
express.get('/', (req, res) => {
console.log('browser access')
}
express.listen(8000, () => console.log('server is running'))
导航到 http://[EXTERNAL_IP_ADDRESS]:8000 时,没有任何反应。
我可以通过外部 IP 进行 SSH 访问,它可以工作
我可以 ping 到外部 IP 地址,这也可以
通过终端(SSH 访问)执行“node app.js”时,我看到“服务器正在运行”
我已设置防火墙规则以接受 tcp=8000(IP 范围 0.0.0.0/0)上的所有传入流量
我有防火墙规则 default-allow-http (tcp: 80) 和 default-allow-https (tcp: 443)
我有一个静态 IP 地址
我有什么遗漏吗?
编辑:
当我通过浏览器访问服务器(使用 :8000)时,页面一直在加载。但是“浏览器访问”消息不会发送到控制台。假设 30 秒后,我在浏览器中收到 ERR_CONNECTION_TIME_OUT。
Express 版本是 4.17.1。我还将“快递”更改为“应用”。
当我打开终端窗口并执行“curl EXTERNAL_IP_ADDRESS:8000”时,什么也没有发生。好像一直在加载。
我将listen(8000) 更改为listen(8000, '0.0.0.0')。没有观察到差异。
问题已解决:
我让它工作了。我在虚拟机上安装了 ufw 并打开了 8000 端口。这就是我的解决方案。
【问题讨论】:
-
你能详细说明“什么都没发生”吗?您在浏览器中看到了哪些消息? Node.js 是否表示已达到目标?你期待发生什么?您是否看到写入控制台的日志消息?如果您运行 netstat,您会看到在端口 8000 上侦听的内容吗?如果你使用 CURL 连接到 VM 上的 8000 端口,你会得到连接吗?
-
快递的哪个版本?
-
试试这个:
express.listen(8000, '0.0.0.0');注意:我不会调用变量express。您正在掩盖app的正常用法。 -
@Kolban:我已经编辑了我的问题,我已经为你的问题添加了答案。我期待在控制台中看到“浏览器访问”。除了“服务器正在运行”之外,我没有看到任何日志消息。当我使用 curl 时,我得到一个“操作超时”。
-
@John Hanley:express 是 4.17.1 版。我还将listen(8000)更改为listen(8000,'0.0.0.0')。问题保持不变。我还将“快递”更改为“应用程序”。
标签: node.js google-cloud-platform google-compute-engine