Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js can';t通过外部IP(nodejs)访问谷歌云计算引擎VM_Node.js_Google Cloud Platform_Google Compute Engine - Fatal编程技术网

Node.js can';t通过外部IP(nodejs)访问谷歌云计算引擎VM

Node.js can';t通过外部IP(nodejs)访问谷歌云计算引擎VM,node.js,google-cloud-platform,google-compute-engine,Node.js,Google Cloud Platform,Google Compute Engine,出于测试目的,我创建了一个Google云计算引擎VM(Debian 9) 我安装了nodejs并创建了一个小脚本。通过我的浏览器导航到外部ip地址时,不会发生任何事情 const express = require('express')() express.get('/', (req, res) => { console.log('browser access') } express.listen(8000, () => console.log('server is ru

出于测试目的,我创建了一个Google云计算引擎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'))
导航到时,不会发生任何事情

const express = require('express')()

express.get('/', (req, res) => {
    console.log('browser access')
}

express.listen(8000, () => console.log('server is running'))
  • 我可以通过外部IP进行SSH访问,它可以正常工作

  • 我可以ping到外部IP地址,这也可以

  • 通过终端(SSH访问)执行“node app.js”时,我看到“服务器正在运行”

  • 我已设置防火墙规则,以接受tcp=8000(IP范围0.0.0.0/0)上的所有传入流量

  • 我有默认允许http(tcp:80)和默认允许https(tcp:443)的防火墙规则

  • 我有一个静态IP地址

有什么我遗漏的吗

编辑:

  • 当我通过浏览器访问服务器(使用:8000)时,页面将继续加载。但“浏览器访问”消息不会发送到控制台。比方说30秒后,我在浏览器中得到一个错误连接超时

  • Express版本是4.17.1。我还将“express”改为“app”

  • 当我打开终端窗口并执行“curl EXTERNAL_IP_ADDRESS:8000”时,什么也没发生。似乎它一直在加载

  • 我将listen(8000)改为listen(8000,'0.0.0')。没有观察到任何差异

问题已解决:


我让它工作了。我在虚拟机上安装了ufw,并打开了8000端口。这就是我的解决方案。

解决方案:


我不仅需要在我的VPC中添加防火墙规则(0.0.0./0 tcp:8000,传入),还需要在我的VM上打开端口8000。我安装了ufw并打开了8000端口。现在开始工作了。

你能详细说明一下“什么都没发生”吗?您在浏览器中看到了哪些消息?Node.js express是否表示已到达某个位置?你期望发生什么?您是否看到写入控制台的日志消息?如果您运行netstat,您是否看到端口8000上有东西在侦听?如果在VM上使用CURL连接到端口8000,是否获得连接?使用哪个版本的express?请尝试以下操作:
express.listen(8000,'0.0.0.0')注意:我不会调用变量
express
。你屏蔽了
应用程序的正常使用
@Kolban:我已经编辑了我的问题,我已经为你的问题添加了答案。我希望在控制台中看到“浏览器访问”。除了“服务器正在运行”之外,我没有看到任何日志消息。当我使用curl时,我得到一个“操作超时”。@johnhanley:express是版本4.17.1。我还将listen(8000)改为listen(8000,‘0.0.0.0’)。问题依然存在。我还将“express”更改为“app”。不需要UFW。在你的问题中,你说你已经有了允许8000端口的防火墙规则。哦,好的。但它解决了我的问题?我确实在GCP控制台中更新了防火墙规则,也许这就是解决方案。当涉及到安全性时,请确保您确切知道每个控件和设置的作用和不作用。这样以后你就不会有惊喜了。