部署到Ubuntu的Express接口请求报localhost连接拒绝该如何解决?
问题排查与解决步骤
核心问题定位
你遇到的报错最根本原因是前端接口地址硬编码错误:前端代码里写死了请求http://localhost:2096/getDataFromDatabase,当用户通过线上域名访问站点时,代码运行在用户的本地浏览器上,localhost指向的是用户自己的电脑,而非你的Ubuntu服务器,自然会触发连接拒绝错误。
分步修复方案
1. 优先修复前端请求地址
推荐改成相对路径,自动适配当前站点的域名、协议与端口,不需要硬编码配置:
$( document ).ready(function() { // 改为相对路径,自动匹配当前部署环境 $.get('/getDataFromDatabase').done(function(data){ for (entry of data) { dates.push(entry.date.split('T')[0]); totalValues.push(entry.totalValue); } }); });
如果接口和前端站点域名不一致,可以替换为你的线上实际域名,注意要和Cloudflare代理的协议(http/https)保持一致。
2. 服务端配置排查
- 检查Ubuntu服务器上Express服务是否正常启动,执行
ss -tulpn | grep 2096确认2096端口有node进程监听,同时修改监听配置允许外部访问:// 新增0.0.0.0参数,允许外部网络访问服务 app.listen(PORT, '0.0.0.0', () => console.log(`Example app listening on port ${PORT}!`), ); - 推荐配置Nginx反向代理,不需要对外暴露2096端口,统一走Cloudflare支持的80/443端口,Nginx配置示例:
如果不使用反向代理,需要检查Ubuntu防火墙(ufw)是否开放2096端口,同时确认Cloudflare的端口规则支持2096:Cloudflare默认仅代理常用端口,2096不在默认支持列表中,直接访问会被拦截。location /getDataFromDatabase { proxy_pass http://127.0.0.1:2096; proxy_set_header Host $host; }
3. Cloudflare配置检查
- 确认SSL/TLS设置和源站协议匹配,避免协议不一致导致的跨域或访问失败问题。
- 上线后建议调整CORS配置,仅允许你的站点域名跨域访问,替换掉当前的
app.use(cors())配置,降低安全风险。
内容的提问来源于stack exchange,提问作者Godzy
相关产品推荐
相关产品推荐

