我们已经在 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 会自动添加防火墙例外。但是,我们在防火墙配置中找不到此例外,这让问题很难理解……