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

配置Nginx实现MVC 5应用虚拟目录URL访问遇404错误求助

问题描述

我有一个运行在IIS上的MVC 5应用,原访问地址为http://localhost:8080。现在希望通过http://localhost:8080/app的形式访问该应用,执行以下操作后出现HTTP Error 404.0 - Not Found错误:

  • 配置Nginx对/app路径做URL转发,配置代码:
server   {
           listen       8080;
           server_name  localhost;
           location /app
           {
           proxy_pass   http://localhost:8084/;
           }
     }
  • 在服务器创建目录结构:C:\intepub\Test\app
  • 在IIS中创建结构:
    IIS
    -- Test(虚拟目录)
    -- app(作为Test下的Web应用,基于ASP.NET MVC5)
解决方案

1. 修正Nginx的proxy_pass配置

当前Nginx把http://localhost:8080/app转发到http://localhost:8084/,但IIS里的app是Test虚拟目录下的Web应用,实际访问路径应为http://localhost:8084/Test/app。调整配置如下:

server   {
           listen       8080;
           server_name  localhost;
           location /app
           {
               proxy_pass   http://localhost:8084/Test/app/;
               # 传递请求头确保MVC正确识别路径
               proxy_set_header Host $host;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_set_header X-Forwarded-Proto $scheme;
           }
     }

如果Test是独立IIS站点且绑定8084端口,目标路径改为http://localhost:8084/app/即可。

2. 调整MVC应用的路由配置

MVC默认路由未考虑URL前缀,修改RouteConfig.cs添加前缀app,确保应用解析转发后的路径:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "app/{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

若需同时支持带前缀和不带前缀的访问,可添加两条路由规则:

routes.MapRoute(
    name: "AppPrefix",
    url: "app/{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

3. 检查IIS应用基础配置

  • 确认Web应用app的物理路径正确指向C:\intepub\Test\app
  • 确认app的程序池设置为ASP.NET v4.0(集成模式),且.NET版本与MVC 5兼容
  • 确认虚拟目录Test的权限设置正确,IIS_IUSRS和Authenticated Users拥有读取权限
  • 先测试直接访问IIS中app的地址(如http://localhost:8084/Test/app),若直接访问也报错,优先排查IIS应用本身的配置问题

4. 排查端口占用问题

用以下命令检查Nginx的8080端口和IIS的8084端口是否被其他程序占用:

netstat -ano | findstr "8080"
netstat -ano | findstr "8084"

内容的提问来源于stack exchange,提问作者Tech learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:40:47