[英]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.