Fork me on GitHub

在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配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
        }

  

 

posted @   爱悟空  阅读(1588)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示