在 gce VM 实例中访问 node.js web 服务器

在 gce VM 实例中访问 node.js web 服务器

我们已经在 gce 上设置了一个 Windows VM 实例以进行 Web 服务器测试,使用 IIS 并且它运行良好:我可以从外部访问我的门户应用程序,因为在创建 VM 时防火墙默认启用了 http/https 流量。

但是,我们现在需要用 node.js 来测试它,当使用相同的 http/https 协议时,我们无法从外部访问它。我们所做的简单测试是:

  • 停止 IIS 以释放 http/https 协议
  • 使用这个简单的网络服务器应用程序运行 node.js:

    var http = require('http');
    http.createServer(function (req, res) {
      res.write('Hello World!'); 
      res.end();
    }).listen(80, "0.0.0.0"); //the server object listens on port 80
    

我们在监听器中测试了几个 IP 地址(“0.0.0.0”、“127.0.0.1”、internal_google_ip、external_google_ip 等),但没有起作用。

有人知道我们是否需要在 VM 实例中设置任何额外配置,如特定的 GCE 网络接口、防火墙设置等吗?这种情况不应该发生,因为如果它正确映射到处理 IIS,它也应该与简单的 node.js web 服务器一起工作。

顺便说一句,如果我们在公司内部服务器中配置这个,它就可以正常工作。请帮忙

答案1

正如您提到的,当您为 IIS 创建实例时,您必须特别选择允许流量的选项,像这样为了使其工作:

防火墙

添加标签和防火墙规则以允许来自 Internet 的特定网络流量

☑ 允许 HTTP 流量

☑ 允许 HTTPS 流量

这将添加标签“http 服务器”“https 服务器”到您的实例,默认情况下,在您的防火墙规则下,“VPC 网络”你将拥有以下两项政策:

default-allow-http
Ingress 
http-server
IP ranges: 0.0.0.0/0
tcp:80  Allow   1000    
default

default-allow-https
Ingress 
https-server
IP ranges: 0.0.0.0/0
tcp:443 Allow   1000    
default

您可以查看如何使用网络标签管理防火墙策略,如果使用得当,它可以简化防火墙规则的管理。

答案2

经过一番分析,问题很容易解决:我们只需添加一条防火墙规则来允许 http/https 流量(80 和 443 端口),瞧!

看起来,当我们在创建 gce 虚拟机期间激活 http/https 访问时,gce 会自动添加防火墙例外。但是,我们在防火墙配置中找不到此例外,这让问题很难理解……

相关内容