GCP虚拟机部署Node.js Express服务器遇SSL协议错误求助
解决GCP部署Node.js Express服务器出现ERR_SSL_PROTOCOL_ERROR的问题
问题根源
你用https://<ip>:8000访问服务器,但默认的Express服务是纯HTTP协议,没有配置SSL证书和HTTPS监听逻辑。浏览器向仅支持HTTP的端口发起HTTPS请求,必然触发SSL协议错误。
可行修复方案
方案1:改用HTTP访问
直接访问http://<ip>:8000,只要GCP防火墙规则允许8000端口的TCP流量(从你的截图看已满足),就能正常访问。
方案2:给Express配置HTTPS服务
如果必须使用HTTPS,按以下步骤操作:
- 获取SSL证书:可以用Let's Encrypt免费证书,或者GCP提供的托管SSL证书(适合搭配负载均衡使用)。
- 修改Express代码,开启HTTPS监听:
const https = require('https'); const fs = require('fs'); const express = require('express'); const app = express(); // 替换为你的证书文件实际路径 const sslOptions = { key: fs.readFileSync('/path/to/your/private-key.pem'), cert: fs.readFileSync('/path/to/your/certificate.pem') }; // 监听HTTPS默认端口443 https.createServer(sslOptions, app).listen(443, () => { console.log('HTTPS服务已启动,监听端口443'); }); // 原有业务路由示例 app.get('/', (req, res) => { res.send('服务正常运行'); }); - 在GCP防火墙中添加规则,允许外部访问443端口的TCP流量。
额外验证步骤
- 登录GCP虚拟机,执行
netstat -tulpn | grep 8000(或443),确认Express进程正在监听目标端口。 - 确认虚拟机的外部IP是静态IP,避免重启后IP变更导致访问失败。
- 若使用了负载均衡或反向代理,需确保代理层已配置SSL证书,且后端与代理的通信规则正确。
内容的提问来源于stack exchange,提问作者Brace Sproul
相关产品推荐
相关产品推荐

