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

Nginx部署.NET+Angular应用根路径返回404其余路径正常

根路径404问题修复方案

问题原因

你的配置存在三个核心问题:

  • index指令错误使用了绝对路径,Nginx的index参数只需要写相对于root目录的文件名,写绝对路径会导致路径拼接错误
  • 全量请求都被location /转发给了5000端口的.NET服务,没有给Nginx处理静态首页的机会,而.NET端也没有配置根路径到index.html的默认映射
  • 注释掉了Angular单页应用必需的try_files fallback规则,后续即使解决根路径问题,前端子路由刷新也会报404

修复步骤

1. 调整Nginx配置

将对应server块修改为如下内容,核心逻辑是:静态资源由Nginx直接从Angular打包目录读取,后端接口请求转发给.NET服务,不存在的路径统一fallback到index.html交给Angular路由处理:

server {
    listen *:80;
    listen 443 ssl;
    server_name   v2202207178565194475.supersrv.de *.supersrv.de;

    # root直接指向Angular打包后的wwwroot目录,index只写文件名
    root /var/www/donau_lead_generator/donau-lead-generator/bin/Release/net6.0/publish/wwwroot;
    index index.html;

    location / {
        # 优先匹配物理文件,找不到就返回index.html,接口请求转给.NET后端
        try_files $uri $uri/ /index.html @dotnet_backend;
    }

    # .NET后端转发规则
    location @dotnet_backend {
        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;
    }

    ssl_certificate /etc/letsencrypt/live/v2202207178565194475.supersrv.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/v2202207178565194475.supersrv.de/privkey.pem;

    # HTTP转HTTPS规则
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
}

如果你的项目没有用独立/api前缀区分前后端请求,不想拆分静态和反代逻辑,也可以直接在.NET端补默认首页配置,见第二步。

2. 补全.NET端静态文件配置(可选,全反代场景必选)

如果你不想让Nginx处理静态文件,坚持全量请求转发给.NET,就去项目的Program.cs(旧版本是Startup.cs)里,在路由配置前添加静态文件和默认首页中间件:

// 注意顺序,要放在路由、鉴权等中间件之前
app.UseDefaultFiles();
app.UseStaticFiles();

// 其他原有中间件配置:app.UseRouting()、app.UseAuthorization()等
// ...

// 最后加fallback规则,让所有前端路由都返回index.html
app.MapFallbackToFile("index.html");

修改完之后重新执行发布命令即可:

dotnet publish --configuration Release

3. 重载服务生效

先校验Nginx配置合法性,再重载配置:

nginx -t
# 输出test is successful后执行重载
nginx -s reload

如果改了.NET代码,重启对应的.NET服务即可。


内容的提问来源于stack exchange,提问作者Eduard Frankford

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:57:13