程序地带

DotNetCore笔记-nginx代理访问swagger


 


最近在学习.NetCore时,准备在linux环境上发布自己Demo项目,并使用nginx代理提供服务。环境和项目部署完后,查看swagger页面,发现无法定位到swagger.json。造成这种问题的原因是:使用代理后,前端请求的地址发生变化,而Swagger又无法自行处理。【记录下,以免忘记。^_^】


这里就需要调整项目的swagger使用代码,并在nginx的location中增加配置。


先看调整前的swagger代码:


app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyAPI v1"));

 


解决步骤:


1、调整nginx配置,在location下增加“proxy_set_header X-Forwarded-Prefix wdapi;”配置


location / myapi / {
proxy_pass http://localhost:5000/; # 被代理服务器的站点地址
proxy_set_header X-Forwarded-Proto $scheme; # 将请求使用的协议告知被代理服务器
proxy_set_header Host $http_host; # 将请求的地址告知被代理服务器
proxy_set_header X-Forwarded-Prefix myapi; # 将路由名称"myapi"告知被代理服务器
}

 


2、调整项目中调用swagger中间件的代码


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.SwaggerEndpoint("v1/swagger.json", "MyApi v1"));

 


最近在学习.NetCore时,准备在linux环境上发布自己Demo项目,并使用nginx代理提供服务。环境和项目部署完后,查看swagger页面,发现无法定位到swagger.json。造成这种问题的原因是:使用代理后,前端请求的地址发生变化,而Swagger又无法自行处理。


这里就需要调整项目的swagger使用代码,并在nginx的location中增加配置。


先看调整前的swagger代码:


app.UseSwagger();


app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyAPI v1"));


解决步骤:


1、调整nginx配置,在location下增加“proxy_set_header X-Forwarded-Prefix wdapi;”配置


location / myapi / {


proxy_pass http://localhost:5000/; # 被代理服务器的站点地址


proxy_set_header X-Forwarded-Proto $scheme; # 将请求使用的协议告知被代理服务器


proxy_set_header Host $http_host; # 将请求的地址告知被代理服务器


proxy_set_header X-Forwarded-Prefix myapi; # 将路由名称"myapi"告知被代理服务器}


2、调整项目中调用swagger中间件的代码


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.SwaggerEndpoint("v1/swagger.json", "MyApi v1"));


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jijiexuanfeng/p/14217292.html

随机推荐

开发小程序分页功能遇到的坑

开发小程序分页功能遇到的坑微信小程序开发中list列表经常要进行分页处理,踩坑在所难免。app.json"enablePullDownRefresh":truewxml&...

页面仔小杨 阅读(833)

MySQL索引小笔记

以MySQL为例首先查看一个表的索引:SHOWINDEXFROM表名–建立索引,提高检索效率createindex索引名on表名(字段名);哪些字段适合添加索引、建立索引的...

Funky_oaNiu 阅读(350)