Google Compute Engine上Node.js运行正常但浏览器无法访问如何解决?
问题排查与解决方案
1. 先确认Google Compute Engine(GCE)端口限制问题
- 登录GCP控制台,进入VPC网络-防火墙页面,检查对应VPC的入站规则是否开放了以下端口的TCP协议访问:
- 需直接访问3000端口:开放3000端口,来源IP设为
0.0.0.0/0(允许所有IP访问)或你自己的客户端公网IP - 需通过域名访问:开放80、443端口,来源IP同上
- 需直接访问3000端口:开放3000端口,来源IP设为
- 确认你的GCE实例绑定了公网IP,且域名
api.mydomain.id、www.api.mydomain.id的DNS解析已指向该公网IP。
2. 检查Ubuntu系统本地防火墙规则
- 执行命令查看ufw防火墙状态:
sudo ufw status - 如果状态为active,执行以下命令开放对应端口:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 需直接访问3000端口的话执行下一行 sudo ufw allow 3000/tcp sudo ufw reload
3. 修复Apache配置问题
- 首先启用Apache必需的代理模块:
sudo a2enmod proxy proxy_http rewrite sudo systemctl restart apache2 - 你当前的80端口配置配置了强制HTTPS跳转,但缺少对应的443端口虚拟主机配置,会导致跳转后无服务响应,需要补充443端口的SSL配置,示例如下:
<VirtualHost *:443> ServerAdmin admin@mydomain.id ServerName api.mydomain.id ServerAlias www.api.mydomain.id ProxyPass / http://localhost:3000/ ProxyPassReverse / http://localhost:3000/ ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # 配置SSL证书,可使用certbot申请免费证书自动配置 SSLCertificateFile /path/to/your/fullchain.pem SSLCertificateKeyFile /path/to/your/privkey.pem </VirtualHost> - 配置完成后执行
sudo apache2ctl configtest检查配置语法是否正确,确认无错后执行sudo systemctl reload apache2重载配置。
4. 确认Node.js服务绑定地址
- 检查你的
app.js中监听端口的代码,如果是如下写法仅允许本地访问:
改为允许所有地址访问:app.listen(3000, '127.0.0.1')
修改后重启nodemon/pm2服务。app.listen(3000, '0.0.0.0')
5. 本地连通性测试
在GCE实例本地执行以下命令逐层排查连通性:
- 测试Node服务本地可访问:
curl http://localhost:3000 - 测试Apache代理本地可访问:
curl http://localhost - 测试公网端口可访问:
curl http://你的实例公网IP:3000、curl http://你的实例公网IP
以上步骤全部完成后,即可正常通过api.mydomain.id访问你的Node服务,需要直接访问3000端口的话确认前两步的端口开放配置即可。
内容的提问来源于stack exchange,提问作者Kodingan Anak Muda
相关产品推荐
相关产品推荐

