当前位置:首页 > 技术实录

更新发布Linux平台上.NET Web项目注意事项

心智碎片2026-03-21 10:39:09技术实录250

今天更新某项目的后台web时出现了一个问题,新代码发布后服务器依然运行的是旧代码,多次发布无效,重启Nginx也无效,经查阅相关资料,恍然大悟,原来是把 .NET服务这茬给忘了,应该就相当于windows的程序池。

更新发布Linux平台上.NET Web项目,要重启 .NET 应用服务,不然始终运行的是内存中的旧代码。

如果使用面板,安装了Supervisor来管理.NET,可通过Supervisor重启对应 .NET 应用。

downloaded-image.jpg

以下是AI回答,可供参考:


核心原因

  1. 职责分离

    • .NET 应用 (如 ASP.NET Core) 运行在独立的进程中(通常是 dotnet YourApp.dll 或由 Kestrel/Web 服务器托管)。

    • Nginx 在这里通常充当反向代理 (Reverse Proxy)。它的作用仅仅是接收外部请求,并将其转发给后端正在运行的 .NET 进程。

  2. 配置未变

    • 发布操作通常只是替换了 .NET 应用的二进制文件 (dll)、静态资源 (wwwroot) 和配置文件 (appsettings.json)。

    • 只要你的发布操作没有修改 Nginx 的配置文件 (通常位于 /etc/nginx/nginx.conf/etc/nginx/conf.d/your-app.conf),Nginx 就完全感知不到后端代码的变化,因此不需要重启或重载。

正确的操作流程

发布 .NET 应用后的标准步骤是重启 .NET 应用服务,而不是 Nginx。

1. 如果你使用 systemd 托管 (Linux 最常见)

你需要重启承载 .NET 应用的 service。

# 假设你的服务名称是 myapp.service
sudo systemctl restart myapp.service

# 查看状态确保启动成功
sudo systemctl status myapp.service

此时,Nginx 会继续运行。当 .NET 应用重启完成并重新监听端口后,Nginx 转发的新请求会自动由新版本的应用处理。

2. 如果你使用 IIS (Windows)

在 Windows 上通常不使用 Nginx,而是用 IIS。如果是这种情况,发布后通常需要:

  • 应用程序池回收:IIS 通常在检测到 web.config 变化时自动回收应用程序池。

  • 或者手动重启站点。

3. 如果你使用 Docker

如果你是将 .NET 应用打包在 Docker 容器中,而 Nginx 运行在宿主机或另一个容器中:

# 重建并重启 .NET 应用容器
docker-compose up -d --build your-dotnet-service
# 或者
docker restart <container-id>

Nginx 容器不需要动,因为它只是通过内部网络名称访问 .NET 容器。


什么情况下需要重启/重载 Nginx?

只有在以下少数情况才需要操作 Nginx:

  1. 修改了 Nginx 配置:你更改了反向代理规则、SSL 证书路径、缓存策略或端口映射。

    • 命令:sudo nginx -t (测试配置) -> sudo systemctl reload nginx (平滑重载,不中断连接)。

  2. 更新了 Nginx 本身:升级了 Nginx 软件版本。

  3. 静态文件缓存问题

    • 如果你发布了新的静态文件 (JS/CSS/图片),但浏览器仍然显示旧版本,这通常是浏览器缓存Nginx 静态文件缓存的问题,而不是需要重启 Nginx。

    • 解决方法:在文件名中加入版本号哈希 (如 app.v1.2.js),或在 Nginx 配置中调整 expires 指令,然后执行 reload (非 restart) 清除 Nginx 自身的缓存(如果配置了的话)。

总结

  • 发布 .NET 代码 -> 重启 .NET 服务 (systemctl restart myapp)。

  • Nginx -> 保持运行,无需操作

注意:在重启 .NET 服务的几秒钟内,用户可能会遇到短暂的 502 Bad Gateway 错误,因为 Nginx 还在尝试连接正在重启的后端端口。这是正常现象,服务启动完成后会自动恢复。

扫描二维码推送至手机访问。

版权声明:本文由心智碎片发布,如需转载请注明出处。

本文链接:https://diary.mindb.vip/technology/267.html

分享给朋友:

“更新发布Linux平台上.NET Web项目注意事项” 的相关文章

驱动版本与硬件对应至关重要

驱动版本与硬件对应至关重要

一天,启惠 说机子不还原了,我一看,是上次做系统忘装还原卡驱动了。于是关机卸载还原卡,记得D盘里好像有个驱动,找了半天,才找到个,上面写的是“FOR3.0及以后”,也没太注意,就双击安装了。(还原卡是4.2的)然后重启安装还原卡。满以为好了,可是重启后,却发现还是提示要安装,不过版本先是变成了4.0…

小析MBR、boot、GRUB

相信大家在不少地方都看到了与MBR、boot、GRUB有关的东西,而有的人对它们的概念并不是多清楚,甚至有点模糊,今天我就为大家讲讲,他们到底都是干什么的,有什么联系,又有什么相同点和不同点。…

冰点问题(启惠看)

冰点问题(启惠看)

冰点失效,CTRL+ALT+SHIFT+F6,设置为boot frozen,重起还是无效。卸载之后,重新安装提示“This Evaluation Version of DeepFreeze has expired”无法进行安装 。如下图:…

序言

从今天起,将正式开始学习WG方面知识。…

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。