You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理Razor Pages发布后修改不生效问题排查

排查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中明确针对生产环境启用,或者修改项目配置:

    1. 在Program.cs中调整配置:
      builder.Services.AddRazorPages()
          .AddRazorRuntimeCompilation(options => {
              // 指定读取原始Pages目录的文件
              options.FileProviders.Add(new PhysicalFileProvider(
                  Path.Combine(Directory.GetCurrentDirectory(), "Pages")));
          });
      
    2. 或者在项目文件(.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:58:28