React Nodemailer表单本地正常 部署Cpanel后报ERR_CONNECTION_REFUSED
排查解决步骤
- 第一步确认前端构建产物是否更新
React代码修改后必须重新执行npm run build生成最新的构建产物,再将build文件夹下的所有文件上传替换到Cpanel站点的根目录,避免部署的仍是修改前的旧代码。 - 第二步清理前端缓存验证代码生效
访问站点后按Ctrl+F5强制刷新忽略缓存,或者打开浏览器开发者工具勾选「禁用缓存」后重新测试,也可以直接在开发者工具的「来源」面板中找到ContactForm.js文件,确认fetch地址是否已经修改为服务器IP地址,排除浏览器缓存导致请求旧地址的问题。 - 第三步验证后端服务运行状态
登录Cpanel服务器确认Node服务是否在5000端口正常运行,推荐使用pm2等进程守护工具保持后端服务常驻,避免关闭终端后进程自动终止。同时检查服务器防火墙、Cpanel安全组规则是否开放了5000端口的入站访问权限,如果使用了CDN服务还要确认CDN支持5000端口的访问,否则建议更换为8443等CDN支持的非标准端口。 - 第四步(推荐)配置反向代理避免端口暴露
可以在Cpanel站点配置中添加反向代理规则,将域名下的指定路径比如/api/contact转发到服务器本地的127.0.0.1:5000/contact,之后前端代码中的fetch地址直接改为/api/contact即可,不需要填写IP和端口,既可以避免跨域问题,也不需要额外开放非标准端口,还能复用域名的HTTPS证书解决IP访问证书不匹配的问题。 - 第五步排查HTTPS证书问题
如果直接使用IP+端口的HTTPS请求,会因为SSL证书绑定的是域名而非IP,导致证书校验失败请求被拦截,这种情况要么给IP单独配置SSL证书,要么改用上面的反向代理方案走域名的HTTPS访问。
内容的提问来源于stack exchange,提问作者Terry Hunt
相关产品推荐
相关产品推荐

