Nginx反向代理Razor Pages发布后修改不生效问题排查
检查发布目录与服务启动路径是否匹配
查看你的NewApp.service文件,确认ExecStart和WorkingDirectory指向的目录,和你dotnet publish输出的目录一致。比如执行dotnet publish -o /var/www/NewApp,那服务文件里应该对应这个路径。可以用cat /etc/systemd/system/NewApp.service查看配置,不一致的话修改后重新加载服务:sudo systemctl daemon-reload && sudo systemctl restart NewApp.service。确认Razor运行时编译在生产环境生效
生产环境下默认会禁用运行时编译,即使你添加了包和代码配置。需要在Program.cs中明确针对生产环境启用,或者修改项目配置:- 在
Program.cs中调整配置:builder.Services.AddRazorPages() .AddRazorRuntimeCompilation(options => { // 指定读取原始Pages目录的文件 options.FileProviders.Add(new PhysicalFileProvider( Path.Combine(Directory.GetCurrentDirectory(), "Pages"))); }); - 或者在项目文件(
.csproj)中添加:<PropertyGroup> <EnableRazorRuntimeCompilation>true</EnableRazorRuntimeCompilation> </PropertyGroup>
同时要确保publish时没有把cshtml文件预编译到程序集,检查
.csproj里是否有<MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>,如果有改成false。- 在
检查文件权限
发布后的文件目录权限可能导致dotnet进程无法读取修改后的文件。执行以下命令设置正确权限:sudo chown -R www-data:www-data /var/www/NewApp # 替换为你的发布目录 sudo chmod -R 755 /var/www/NewApp验证服务是否真正重启
执行systemctl status NewApp.service查看服务状态,确认显示的是最新的启动时间。也可以用ps aux | grep dotnet检查是否有旧的dotnet进程残留,如果有手动杀死:sudo kill -9 <进程ID>,再重启服务。排查Nginx缓存
检查Nginx的站点配置文件(比如/etc/nginx/sites-available/your-site.conf),是否启用了proxy_cache或者静态文件缓存。如果有缓存配置,尝试临时关闭并重启Nginx,或者清除Nginx缓存目录(通常在/var/cache/nginx/):sudo rm -rf /var/cache/nginx/* sudo systemctl restart nginx
内容的提问来源于stack exchange,提问作者garu525

