diff --git a/src/TrackCenter.Api/TrackCenterApiModule.cs b/src/TrackCenter.Api/TrackCenterApiModule.cs index 33f3aacd..12ee236e 100644 --- a/src/TrackCenter.Api/TrackCenterApiModule.cs +++ b/src/TrackCenter.Api/TrackCenterApiModule.cs @@ -9,6 +9,7 @@ using Fake.Serilog; using FluentValidation.AspNetCore; using Hangfire; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.HttpOverrides; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Authorization; using OpenTelemetry.Resources; @@ -134,12 +135,26 @@ public class TrackCenterApiModule : FakeModule // 添加授权服务 services.AddAuthorization(); + + services.Configure(options => + { + // 反向代理场景下恢复客户端真实来源信息,供 Swagger、鉴权和重定向等中间件使用 + options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | + ForwardedHeaders.XForwardedProto | + ForwardedHeaders.XForwardedHost; + options.KnownNetworks.Clear(); + options.KnownProxies.Clear(); + }); } public override void ConfigureApplication(ApplicationConfigureContext context) { var app = context.GetWebApplication(); var configuration = context.GetConfiguration(); + + // 必须在读取 Scheme/Host/PathBase 的中间件之前执行,否则 Swagger 会生成错误的请求地址 + app.UseForwardedHeaders(); + app.Use(async (httpContext, next) => { httpContext.Request.EnableBuffering();