在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; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)