使用 nginx 配置子路徑訪問 asp.net core 網站時,對 view 中路徑生成的處理


這個問題是使用 docker 生成了 asp.net core 網站鏡像,在使用 nginx 指向此鏡像容器后,用的子路徑虛擬路徑,但是因為反向代理,asp.net core 並不認為是從子路徑過來的,直接訪問 controller 的 action 方法沒問題,但是如果生成 view 內容時,view 再引用的資源路徑就會錯誤。

在 nginx 中的配置:

location /backstage/web/ {
    proxy_pass http://web-backstage/;
    proxy_set_header X_Real_IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;
}

解決方法(環境:.net core 3.1),修改 Startup.cs 配置:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    var pathBase = Environment.GetEnvironmentVariable("ASPNETCORE_APP_PATH");
    if (!string.IsNullOrWhiteSpace(pathBase))
    {
        Console.WriteLine("ASPNETCORE_APP_PATH:" + pathBase);
        
        //1、配置請求基地址(解決 view 的路徑生成錯誤):
        app.Use((context, next) =>
        {
            context.Request.PathBase = pathBase;
            return next();
        });

        // 2、配置靜態文件基地址(不配置的話,用上面生成的地址無法訪問到靜態文件):
        app.UsePathBase(pathBase);
    }
    // 正常使用靜態文件
    app.UseStaticFiles();
}

參考:

https://stackoverflow.com/questions/59202414/set-virtual-path-to-asp-net-core-mvc-application-behind-nginx-reverse-proxy

https://stackoverflow.com/questions/46593999/how-to-host-a-asp-net-core-application-under-a-sub-folder


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM