sat*_*ril 3 asp.net-mvc nginx asp.net-core
我有一个 ASP NET Core 应用程序在 docker 容器内运行,我尝试使用我在另一个 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"
听起来您的反向代理的工作方式/mvcapp如下/所示:
location /mvcapp {
proxy_pass http://localhost:6009/; # assume you expose the 6009 port
...
}
Run Code Online (Sandbox Code Playgroud)
如果是这种情况,那是因为代理切断了前缀/mvcapp。并且您的 MVC 应用程序没有意识到虚拟应用程序路径是/mvcapp. 要解决这个问题,请添加一个中间件来显式设置PathBase:
公共无效配置(IApplicationBuilder 应用程序,IWebHostEnvironment env)
{
// 添加这个中间件作为第一个
app.Use((context, next)=> {
context.Request.PathBase = Environment.GetEnvironmentVariable("ASPNETCORE_APPL_PATH");
返回下一个();
});
// ...其他中间件
}
并ASPNETCORE_APPL_PATH在启动docker时传递环境。例如,您可以在命令中传递环境:
## 假设您要将端口 6009 映射到 80, ## 镜像名称为 nginxtocore docker run -p 6009:80 -e ASPNETCORE_APPL_PATH='/mvcapp' nginxtocore
| 归档时间: |
|
| 查看次数: |
2256 次 |
| 最近记录: |