ASP.NET Core 应用在 Linux 上无法运行,主因是未安装匹配的 dotnet-runtime;需用 apt/dnf 安装对应版本,通过 systemd 管理服务,配置 Environment 传敏感配置,Nginx 反代需调优超时与哈希桶大小,并严格校验文件权限。
ASP.NET Core 应用在 Linux 上跑不起来,十有八九是没装
Linux 服务器默认没有 .NET 运行时,
出来的文件不能直接双击运行——它不是“绿色版”。你得先确认系统里装的是匹配的
,而不是 SDK(开发用的)或旧版本。
常见错误现象:
或
;这说明
命令根本不存在,或版本不兼容。
用
查已装运行时;若报错,就先去
.NET 官网下载对应版本的 runtime(非 SDK)
推荐装
(或你项目实际用的版本),别装
单独包——它依赖
,漏装会启动失败
Ubuntu/Debian 用
;CentOS/RHEL 用
;别用 snap 或第三方源,容易版本错乱
用
管服务,别用
手动起进程看着简单,但一断 SSH、一重启机器、一出异常,应用就没了。Linux 生产环境必须交由
管理生命周期。
使用场景:需要开机自启、崩溃自动重启、日志统一收集、限制内存/CPU、按用户权限运行。
写一个
,关键项不能少:
(必须设,否则读不到
)、
(别用 root)、
要写全路径:
;别省略
,否则
找不到命令
改完记得
,再
(开机自启)和
里的连接字符串、密钥,在 Linux 上别硬编码
Windows 开发时可能把数据库密码写死在
里,传到 Linux 服务器就等于把密码明文暴露在文件系统中——运维、审计、备份都可能看到。
C知道
CSDN推出的一款AI技术问答工具
下载
性能/兼容性影响:硬编码不光是安全问题,还会导致多环境无法复用同一份发布包。
用环境变量替代:在
service 文件里加
,然后代码里靠
自动绑定
或者用
启动时传参,但生产环境更推荐 systemd + Environment
千万别用
或
在服务器上生成证书——它们是开发工具,Linux 生产应配 Nginx 反向代理 + Let's Encrypt
Nginx 反向代理 502 错误,大概率是
或 upstream 超时
ASP.NET Core 默认监听
,Nginx 做反代后出现 502,不是应用挂了,就是 Nginx 没连上或等不及。
常见错误现象:
(端口没开/应用没启)、
(超时太短)。
检查
地址是否拼错,比如写成
但应用实际监听
在
块里加
,否则域名稍长(如带下划线或长子域)就会报
加超时配置:
、
,避免大文件上传或长轮询被中断
最常被忽略的是权限:
服务指定的
必须对
和
文件有读+执行权,对日志目录有写权。chown 错一个目录,
就只显示 “Started MyApp” 然后静音。
dotnet-runtimedotnet publishdotnet-runtimebash: dotnet: command not foundFailed to load /libhostfxr.sodotnetdotnet --list-runtimesdotnet-runtime-8.0aspnetcore-runtime-8.0dotnet-runtimeapt install dotnet-runtime-8.0dnf install dotnet-runtime-8.0systemdnohup dotnet xxx.dll &systemd/etc/systemd/system/myapp.serviceWorkingDirectoryappsettings.jsonUserRestart=alwaysExecStart/usr/bin/dotnet /var/www/myapp/MyApp.dll/usr/bin/dotnetsystemdsudo systemctl daemon-reloadsudo systemctl enable myappsudo systemctl start myappappsettings.Production.jsonappsettings.Production.jsonsystemdEnvironment=ConnectionStrings__DefaultConnection=...IConfigurationdotnet run --environment Production --urls http://0.0.0.0:5000dotnet user-jwtsdotnet dev-certsserver_names_hash_bucket_sizehttp://localhost:5000connect() failed (111: Connection refused)upstream timed out (110: Connection timed out)upstream127.0.0.1:5001:5000http{}server_names_hash_bucket_size 64;could not build the server_names_hashproxy_read_timeout 300;proxy_send_timeout 300;systemdUserWorkingDirectory.dlljournalctl -u myapp