You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu服务器Angular调用NodeJS后端API遇ERR_CONNECTION_REFUSED

Ubuntu服务器上Angular+Nginx访问本地NodeJS API出现ERR_CONNECTION_REFUSED的解决思路

问题描述

在Ubuntu服务器上通过NGINX部署Angular站点后,访问同一服务器上运行在localhost:3000的NodeJS后端API时,持续出现ERR_CONNECTION_REFUSED错误。本地环境中Angular与API协作正常,已尝试配置代理文件、启用CORS等操作但未解决。

排查与解决方案

1. 修正NodeJS后端的监听地址

后端仅监听localhost:3000的话,只能接收服务器本地发起的请求,外部或Nginx的请求无法到达。修改后端代码,让其监听所有网卡:

// 原监听代码示例
// app.listen(3000, 'localhost', () => { ... });

// 修改为监听0.0.0.0
app.listen(3000, '0.0.0.0', () => {
  console.log('API服务运行在0.0.0.0:3000');
});

2. 配置Nginx反向代理(替代Angular开发代理)

注意:angular.json中的proxyConfig是**开发环境(ng serve)**的配置,部署到Nginx后完全无效。需要在Nginx站点配置中添加反向代理规则:

打开Nginx配置文件(通常路径:/etc/nginx/sites-available/你的站点.conf),在server块内添加:

location /api/v1/ {
    proxy_pass http://localhost:3000/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

保存后重启Nginx:

sudo systemctl restart nginx

3. 调整前端API请求路径

前端直接调用https://myIPAdress/api/v1/...会绕过Nginx代理,直接请求3000端口(大概率被防火墙拦截)。改为相对路径即可:

registerUser(username: string, password: string, email: string){
  // 去掉域名,使用相对路径
  let url="/api/v1/users/register";
  return this.http.post(url, {
    "username": username,
    "email": email,
    "password": password 
  })
}

4. 检查服务器防火墙(可选)

如果非要直接开放3000端口(不推荐,存在安全风险),可以执行:

# Ubuntu用ufw防火墙的话,永久开放3000端口
sudo ufw allow 3000/tcp
# 重启防火墙生效
sudo ufw reload

更安全的做法是通过Nginx反向代理,无需对外暴露3000端口。

5. 验证后端服务状态

确保NodeJS服务正在运行且监听正确端口:

# 检查端口监听情况
sudo ss -tulpn | grep 3000

如果输出显示0.0.0.0:3000则监听正常;若只有127.0.0.1:3000,说明还是监听地址的问题,回到步骤1修改。

内容的提问来源于stack exchange,提问作者MansNotHot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:15:54