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代理配置问题排查
你的配置存在两处关键问题,调整方案如下:
- 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; } - 配置合法性校验:执行
sudo nginx -t检查配置语法,无报错后执行sudo systemctl reload nginx生效配置
三、SSL证书与Kestrel配置排查
- Kestrel证书有效性:确保服务器上Kestrel加载的证书可用。如果使用开发证书,需在启动命令中指定证书路径,或在
appsettings.json中配置:"Kestrel": { "Endpoints": { "Https": { "Url": "https://localhost:7040", "Certificate": { "Path": "/path/to/your/cert.pfx", "Password": "cert-password" } } } } - 简化内部通信:如果不需要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
相关产品推荐
相关产品推荐

