【问题标题】:Set Virtual Path to ASP NET Core MVC Application behind nginx reverse proxy在 nginx 反向代理后面设置 ASP NET Core MVC 应用程序的虚拟路径
【发布时间】:2020-03-30 19:31:59
【问题描述】:

我有一个在 docker 容器中运行的 ASP NET Core 应用程序,我正在尝试使用我在另一个 docker 容器中构建的 NGINX 反向代理访问该应用程序。

当我尝试使用我在 Nginx .conf 文件上配置的虚拟路径访问 MVC 应用程序时,例如:“http://localhost:1000/mvcapp/”,所有使用相对路径的 css、js 和 othrr 静态文件都找不到,因为 mvc 不处理虚拟路径来正确配置这些文件的路径。

我的网址:http://localhost:1000/mvc

mvc 构建的路径:href="/css/bootstrap.css"

mvc应该构建的正确方式:href="mvc/css/bootstrap"

【问题讨论】:

    标签: asp.net-mvc nginx asp.net-core


    【解决方案1】:

    听起来您的反向代理的工作方式是将/mvcapp 映射到/,如下所示:

    location /mvcapp {
        proxy_pass         http://localhost:6009/;    # assume you expose the 6009 port
        ...
    }
    

    如果是这样,那是因为代理切断了/mvcapp 前缀。而且您的 MVC 应用程序没有意识到虚拟应用程序路径是 /mvcapp。要解决这个问题,请添加一个中间件来显式设置 PathBase:

    公共无效配置(IApplicationBuilder 应用程序,IWebHostEnvironment env) { // 将此中间件添加为 first 中间件 app.Use((context, next)=> { context.Request.PathBase = Environment.GetEnvironmentVariable("ASPNETCORE_APPL_PATH"); 返回下一个(); }); // ... 其他中间件 }

    并在启动docker时传递ASPNETCORE_APPL_PATH环境。例如,可以在命令中传递环境:

    ## 假设您要将端口 6009 映射到 80, ## 并且镜像名称是 nginxtocore docker run -p 6009:80 -e ASPNETCORE_APPL_PATH='/mvcapp' nginxtocore

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 2013-12-07
      相关资源
      最近更新 更多