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

Ubuntu服务器上.NET Core API与Angular交互报ERR_CONNECTION_REFUSED

AWS EC2 Angular前端调用API出现ERR_CONNECTION_REFUSED排查方案

问题背景

  • 环境:AWS Ubuntu服务器,Nginx代理80端口到Angular静态构建文件;API通过Kestrel运行,启动时指定--urls https://localhost:7040
  • 现象:公网DNS可正常访问Angular前端,但调用/api路径时持续触发ERR_CONNECTION_REFUSED;本地环境(Angular:4200,API:https://localhost:7040)运行完全正常

一、监听进程检测异常排查

你提到lsof -i :7040无结果,但ss -tuln | grep LISTEN | grep ':7040'能看到Kestrel监听,这是权限导致的正常现象:

  • lsof默认仅展示当前用户有权限查看的进程,Kestrel可能以www-data或自定义服务用户运行,执行sudo lsof -i :7040即可看到完整进程信息
  • 确认ss输出的监听地址为127.0.0.1:7040或::1:7040(符合https://localhost:7040的配置),本地回环监听不影响Nginx内部代理

二、Nginx代理配置问题排查

你的配置存在两处关键问题,调整方案如下:

  1. SSL证书验证问题:Nginx转发到HTTPS的Kestrel时,会默认验证证书有效性,而开发/自签名证书会被拒绝,导致连接失败。需在location /api块中添加参数禁用验证:
    location ~* /api(/.*)?$ {
        proxy_pass         https://localhost:7040/api$1;
        # 新增以下配置
        proxy_ssl_verify off;
        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;
    }
    
  2. 配置合法性校验:执行sudo nginx -t检查配置语法,无报错后执行sudo systemctl reload nginx生效配置

三、SSL证书与Kestrel配置排查

  1. Kestrel证书有效性:确保服务器上Kestrel加载的证书可用。如果使用开发证书,需在启动命令中指定证书路径,或在appsettings.json中配置:
    "Kestrel": {
      "Endpoints": {
        "Https": {
          "Url": "https://localhost:7040",
          "Certificate": {
            "Path": "/path/to/your/cert.pfx",
            "Password": "cert-password"
          }
        }
      }
    }
    
  2. 简化内部通信:如果不需要Nginx与Kestrel之间用HTTPS,可将Kestrel改为监听HTTP:--urls http://localhost:7040,同时Nginx的proxy_pass改为http://localhost:7040/api$1,彻底规避证书问题

其他可能的排查方向

  • 服务器防火墙:检查ufw是否限制本地回环访问7040端口,执行sudo ufw status,若有需要添加规则:sudo ufw allow in from 127.0.0.1 to any port 7040
  • API服务状态:查看API日志确认是否正常启动,若为systemd服务,执行journalctl -u your-api-service-name,排查是否有启动或运行时错误
  • Angular API地址配置:确认environment.prod.ts中的apiUrl为/api(而非https://localhost:7040/api),否则前端会在客户端浏览器直接请求本地localhost,导致跨域或连接拒绝
  • Nginx错误日志:实时查看日志定位问题:sudo tail -f /var/log/nginx/error.log,触发API请求后观察是否有SSL证书错误、连接超时等信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:52:06