React+Express部署GoDaddy VPS:后端仅HTTP可用HTTPS报错求助
问题分析与解决办法
错误原因
你用HTTPS请求https://example.com:8443/send-email,但后端Express服务仅监听HTTP协议的3001端口,8443端口既没有配置SSL证书,也没有对应支持HTTPS的服务,导致SSL握手时版本不匹配,触发curl: (35) error:0A00010B:SSL routines::wrong version number错误。
方案1:用cPanel反向代理(推荐,适合新手)
利用cPanel的反向代理功能,将HTTPS域名请求转发到本地HTTP后端,无需修改后端代码:
- 登录cPanel,进入SSL/TLS模块,确认你的域名已安装有效SSL证书(GoDaddy支持免费的Let's Encrypt证书)。
- 找到Advanced下的Reverse Proxy(部分版本在Apache Configuration内),添加代理规则:
- 代理路径填
/send-email - 目标URL填
http://127.0.0.1:3001
- 代理路径填
- 保存配置后,前端直接请求
https://example.com/send-email(无需加端口),Apache会自动将HTTPS请求转发到本地3001端口的HTTP服务,同时解决跨域问题。
方案2:给Express服务配置HTTPS
让后端直接支持HTTPS协议,适配8443端口:
- 从cPanel的SSL/TLS模块下载域名的SSL证书文件(通常是
cert.pem和privkey.pem),上传到VPS的Express项目目录。 - 修改Express代码,引入HTTPS模块启动服务:
const https = require('https'); const fs = require('fs'); const express = require('express'); const app = express(); // 保留原有路由逻辑 app.post('/send-email', (req, res) => { // 你的业务代码 }); // 加载SSL证书 const sslOptions = { key: fs.readFileSync('./privkey.pem'), cert: fs.readFileSync('./cert.pem') }; // 启动HTTPS服务监听8443端口 https.createServer(sslOptions, app).listen(8443, () => { console.log('HTTPS服务运行在8443端口'); });
- 重启Express服务后,用
curl https://example.com:8443/send-email测试,确认请求正常。
注意事项
- 若用方案2,需确保VPS防火墙(如firewalld/iptables)开放8443端口。
- 前端避免直接请求HTTP端口(如3001),浏览器会因为混合内容(HTTPS页面加载HTTP资源)阻止请求,必须通过HTTPS方式访问后端接口。
内容的提问来源于stack exchange,提问作者leon
相关产品推荐
相关产品推荐

