1. 程式人生 > 實用技巧 >在Linux下使用Nginx 部署專案 Swagger文件無法訪問的問題

在Linux下使用Nginx 部署專案 Swagger文件無法訪問的問題

使用netcore 3.1 + nginx +Swashbuckle.AspNetCore 5.6.3 部署

出現如下錯誤

部署在windows下 專案正常,直接用VS除錯執行也正常顯示,釋出在Linux下無法訪問,Linux下使用的是nginx代理,所以推測是nginx代理問題,

經過兩天查閱和嘗試,最終確認問題為

nginx是代理後url路徑發生變化導致swagger無法定位到json。 下面為解決重要步驟:
 app.UseSwagger(c=> 
            {
                c.PreSerializeFilters.Add((doc, item) 
=> { //根據代理伺服器提供的協議、地址和路由,生成api文件服務地址 doc.Servers = new List<OpenApiServer> { new OpenApiServer { Url = $"{item.Scheme}://{item.Host.Value}/{item.Headers["X-Forwarded-Prefix"]}"
} }; }); }); app.UseSwaggerUI(c => { c.ShowExtensions(); c.ValidatorUrl(null); c.SwaggerEndpoint("/swagger/v1/swagger.json", $"{ApiName} V1"); c.RoutePrefix
= string.Empty; c.DocExpansion(DocExpansion.None); });

nginx配置

location / {
                proxy_pass http://localhost:5000;
                #proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection keep-alive;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Port $server_port;
                proxy_cache_bypass $http_upgrade;

                proxy_set_header   X-Forwarded-Prefix swagger;     #------其中swagger可以更換任何路由
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
        }