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

ASP.NET Core WebAPI部署Ubuntu服务器遇ERR_CONNECTION_REFUSED问题

解决.NET Core WebAPI在Ubuntu+Nginx下的ERR_CONNECTION_REFUSED问题

从你的描述和提供的信息来看,核心问题是你的WebAPI应用并没有在Droplet上正常运行并监听5000/5001端口——从netstat -ntlp的输出里完全看不到dotnet进程的监听记录,这就导致Nginx无法连接到上游的应用服务,进而返回连接拒绝的错误。

下面是一步步的排查和解决步骤:

1. 先确保WebAPI应用能在Droplet本地正常启动

这是最基础的一步,先抛开Nginx,直接在Droplet上运行应用:

  • 进入你的WebAPI项目目录(或者发布后的目录),执行dotnet run(如果是未发布的源码)或者dotnet YourWebApi.dll(如果是发布后的文件)。
  • 然后在Droplet本地执行curl http://127.0.0.1:5000/api/values,看是否能拿到预期的JSON响应。
    • 如果这一步就失败,看控制台的错误输出——常见问题比如缺少依赖、配置错误(比如HTTPS证书问题),根据错误提示修复。
    • 如果成功,说明应用本身没问题,接下来处理端口绑定和后台运行的问题。

2. 确保应用监听正确的端口(允许本地代理访问)

默认情况下,.NET Core模板的WebAPI会绑定localhost:5000和localhost:5001,虽然Nginx是本地代理理论上可以访问,但有时候可能因为环境变量或配置导致端口绑定异常。你可以:

  • 启动时显式指定监听本地所有网卡的5000端口:
    dotnet run --urls=http://0.0.0.0:5000
    
    或者发布后运行:
    dotnet YourWebApi.dll --urls=http://0.0.0.0:5000
    
  • 也可以修改appsettings.json或appsettings.Production.json,添加/修改Urls配置:
    {
      "Urls": "http://0.0.0.0:5000",
      // 其他配置项...
    }
    

3. 让应用在后台持续运行

直接用dotnet run启动的话,关闭终端进程就会停止,所以需要用systemd来托管应用,确保它能持续运行并在崩溃后自动重启:

  1. 创建一个systemd服务文件,比如/etc/systemd/system/webapi.service:
    [Unit]
    Description=My .NET Core WebAPI Service
    After=network.target
    
    [Service]
    WorkingDirectory=/path/to/your/webapi/publish/folder
    ExecStart=/usr/bin/dotnet /path/to/your/webapi/publish/folder/YourWebApi.dll
    Restart=always
    RestartSec=10
    SyslogIdentifier=dotnet-webapi
    User=www-data
    Environment=ASPNETCORE_ENVIRONMENT=Production
    Environment=ASPNETCORE_URLS=http://0.0.0.0:5000
    
    [Install]
    WantedBy=multi-user.target
    
    注意替换/path/to/your/webapi/publish/folder和YourWebApi.dll为实际路径和文件名。
  2. 重新加载systemd配置并启动服务:
    sudo systemctl daemon-reload
    sudo systemctl enable webapi.service
    sudo systemctl start webapi.service
    
  3. 检查服务状态:
    sudo systemctl status webapi.service
    
    如果显示active (running),再用netstat -ntlp查看,应该能看到dotnet进程监听5000端口了。

4. 处理HTTPS重定向的问题

从你的curl结果看,应用返回了307重定向到HTTPS的5001端口,这是因为默认WebAPI模板启用了UseHttpsRedirection中间件。如果你的Nginx是用HTTP代理到5000,这会导致跳转失败:

  • 如果你暂时不需要HTTPS(后续可以在Nginx层面配置Let's Encrypt证书),可以在Startup.cs里注释掉app.UseHttpsRedirection();这一行,或者在生产环境配置里禁用它。
  • 如果要保留HTTPS,需要确保应用有有效的证书(比如生成自签名证书,或者用Let's Encrypt),并修改Nginx配置代理到5001端口,同时配置SSL。

5. 重启Nginx并验证

完成以上步骤后,重启Nginx:

sudo systemctl restart nginx

然后再用curl或者浏览器访问你的Droplet IP,应该就能正常访问WebAPI接口了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:48:01