簡體   English   中英

在 nginx 反向代理后面設置 ASP NET Core MVC 應用程序的虛擬路徑

[英]Set Virtual Path to ASP NET Core MVC Application behind nginx reverse proxy

我有一個 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
    ...
}

如果是這種情況,那是因為代理切斷了/mvcapp前綴。 並且您的 MVC 應用程序沒有意識到虛擬應用程序路徑是/mvcapp 要解決這個問題,請添加一個中間件來顯式設置PathBase

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // add this middleware as the first one
    app.Use((context, next)=> {
        context.Request.PathBase = Environment.GetEnvironmentVariable("ASPNETCORE_APPL_PATH");
        return next();
    });          
    //  ... other middlewares
}

並在啟動ASPNETCORE_APPL_PATH時傳遞ASPNETCORE_APPL_PATH環境。 例如,您可以在命令中傳遞環境:

## assume you want to map the port 6009 to 80, 
##     and the image name is nginxtocore
docker run -p 6009:80 -e ASPNETCORE_APPL_PATH='/mvcapp'  nginxtocore

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM