无法从公网访问部署在Ubuntu VPS上的Asp.Net Api如何解决
故障排查及解决步骤
第一步:确认ASP.NET Core应用的监听地址
- 默认情况下ASP.NET Core应用只会监听
localhost:5000/127.0.0.1:5000,不会接收来自外部网卡的请求,这是最常见的故障原因 - 修改监听配置的两种方式:
- 启动时追加参数:
dotnet your_app.dll --urls http://0.0.0.0:5000 - 在Program.cs/Startup.cs中硬编码配置:
builder.WebHost.UseUrls("http://0.0.0.0:5000");
- 启动时追加参数:
- 验证监听状态:执行
ss -tulpn | grep 5000,如果返回结果中监听地址为127.0.0.1:5000说明配置未生效,如果为0.0.0.0:5000说明已正常监听所有网卡
第二步:确认系统防火墙及VPS安全组配置
- Ubuntu默认ufw防火墙可能未开放80、5000端口,执行以下命令开放端口:
ufw allow 80/tcp ufw allow 5000/tcp ufw reload - 登录VPS服务商控制台,确认安全组入站规则已经开放80、5000端口的TCP访问,源地址设为
0.0.0.0/0(或指定的访问网段)
第三步:验证Nginx配置正确性
- Nginx反向代理配置参考示例如下:
server { listen 80 default_server; listen [::]:80 default_server; server_name _; # 可替换为你的公网IP或绑定的域名 location / { proxy_pass http://127.0.0.1:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } - 配置修改后执行
nginx -t验证语法是否正确,无误后执行systemctl reload nginx重载配置 - 验证Nginx运行状态:执行
systemctl status nginx,确认服务处于active运行状态
第四步:本地验证转发是否生效
- 在VPS本地执行
curl http://127.0.0.1:80,如果能正常返回API结果说明Nginx转发配置正常,故障点在外部网络访问限制 - 如果本地curl 80端口也报错,可查看Nginx错误日志定位问题:
tail -f /var/log/nginx/error.log
第五步:排查运营商端口限制
- 如果以上配置都无误,可临时将Nginx监听端口改为8080,开放对应防火墙和安全组规则后尝试访问
公网IP:8080,如果可以访问说明运营商封禁了80端口,可更换端口或备案后申请解封
内容的提问来源于stack exchange,提问作者Avangardum
相关产品推荐
相关产品推荐

