SwaggerUI Try It Out在NGINX反向代理下的路径配置问题求助
解决SwaggerUI Try It Out在NGINX反向代理下的路径前缀问题
要让Try It Out请求带上/myapi前缀,需要同时配置ASP.NET Core应用和NGINX反向代理,以下是具体步骤:
ASP.NET Core 配置
1. 设置路径基址
在Program.cs中添加UsePathBase中间件,让应用识别反向代理的子路径:
var app = builder.Build(); // 配置路径基址,匹配NGINX的子路径 app.UsePathBase("/myapi"); // 后续中间件配置(UseSwagger、UseSwaggerUI等)
2. 配置Swagger生成器
在AddSwaggerGen中添加Server配置,告诉SwaggerUI请求的基础URL前缀:
builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "MyAPI", Version = "v1" }); // 添加反向代理的子路径作为Swagger的服务器地址 c.AddServer(new OpenApiServer { Url = "/myapi", Description = "NGINX反向代理子路径" }); });
3. 可选:调整SwaggerUI访问路径
如果希望通过/myapi/swagger访问SwaggerUI,修改UseSwaggerUI的RoutePrefix:
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyAPI V1"); c.RoutePrefix = "myapi/swagger"; // 让SwaggerUI挂载在子路径下 });
NGINX 配置
确保反向代理配置正确转发请求和请求头,示例配置:
location /myapi/ { # 转发到ASP.NET Core应用的地址和端口 proxy_pass http://localhost:5000/; # 传递必要的请求头,让应用识别反向代理信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Path /myapi; }
注意proxy_pass末尾的斜杠,它会把/myapi/之后的路径部分转发到后端应用的根路径(比如/myapi/api/myendpoint会转发到后端的/api/myendpoint)。
验证配置
重启ASP.NET Core应用和NGINX后,访问SwaggerUI,使用Try It Out发送请求,检查请求URL是否包含/myapi前缀。
内容的提问来源于stack exchange,提问作者R.Haughton
相关产品推荐
相关产品推荐

