Ubuntu 20.04中DotNet 8 Swagger正常但API报内部服务器错误求助
解决DotNet API部署后接口500错误的排查步骤
1. 配置Nginx详细代理日志
你的Nginx配置未指定专属应用日志,且默认日志路径并非你查看的/var/www/log/error.log。Ubuntu系统Nginx默认日志目录为/var/log/nginx/,修改server配置添加专属日志:
server { listen 80; server_name www.mysite.com; # 替换为实际域名,比通用的_更精准 access_log /var/log/nginx/myapi_access.log; # 记录所有请求日志 error_log /var/log/nginx/myapi_error.log warn; # 记录Nginx错误,级别设为warn或debug location / { proxy_pass http://localhost: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生效:
sudo systemctl restart nginx
调用出错接口后,查看/var/log/nginx/myapi_access.log和/var/log/nginx/myapi_error.log,可确认请求是否到达Nginx、转发是否成功等信息。
2. 查看DotNet应用内部日志
500错误由应用内部抛出,Nginx仅转发状态码,需重点排查应用日志:
方法一:查看应用配置的日志文件
检查项目的appsettings.Production.json(生产环境配置),确保日志级别足够详细,示例配置:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" }, "File": { "Path": "/var/log/myapi/app.log", # 指定日志输出路径 "LogLevel": { "Default": "Information" } } } }
若配置了文件日志,直接查看对应路径的日志文件即可。
方法二:通过systemd查看服务日志
如果DotNet API用systemd托管(如配置了myapi.service服务),用以下命令实时查看日志:
sudo journalctl -u myapi.service -f
调用出错接口后,就能看到应用抛出的具体异常,比如数据库连接失败、配置错误等。
3. 验证应用运行状态与环境配置
- 检查API是否在5000端口正常监听:
ss -tulpn | grep 5000
确保输出中存在dotnet进程占用5000端口。
- 检查MongoDB连接配置:
对比开发环境appsettings.json与生产环境appsettings.Production.json,确认MongoDB连接字符串(地址、端口、认证信息、数据库名)是否正确,同时验证服务器上MongoDB服务状态:
sudo systemctl status mongod
可直接测试MongoDB连接:
mongosh "mongodb://your-connection-string"
4. 跳过Nginx直接测试API
在服务器上用curl直接访问API端口,验证是否是Nginx转发问题:
curl http://localhost:5000/api/Auth/GetToken
若直接访问也报错,说明问题出在应用本身;若直接访问正常,再回到Nginx配置排查转发逻辑。
内容的提问来源于stack exchange,提问作者Sang Suantak
相关产品推荐
相关产品推荐

