.NET Core 6 API负载均衡服务器上Swagger无法访问问题排查
问题分析与解决:Swagger通过负载均衡访问时的HTTPS/HTTP问题
这确实是HTTPS/HTTP混合内容导致的问题。原因是你通过HTTPS访问负载均衡的Swagger页面,但Swagger内部发起的API请求用的是HTTP协议,浏览器的安全策略会拦截这种混合内容请求,所以出现了控制台里的错误。
解决步骤:
配置API识别负载均衡的HTTPS请求
在.NET Core 6的Program.cs中添加转发头配置,让API能识别到负载均衡传递的HTTPS协议信息,这样Swagger生成的接口地址会自动用HTTPS:// 先添加转发头服务配置 builder.Services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; // 如果负载均衡在本地或可信IP段,可添加到KnownProxies,避免被伪造头攻击 // options.KnownProxies.Add(IPAddress.Parse("负载均衡IP")); }); // 在UseRouting之前启用转发头中间件 app.UseForwardedHeaders(); // 保持原有的Swagger配置 app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API V1"); });检查负载均衡的头转发配置
确保负载均衡在转发请求时,传递X-Forwarded-Proto头,值为https。以Nginx为例,需要在反向代理配置中添加:location / { proxy_pass http://你的API服务器地址; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $remote_addr; }验证Swagger接口地址
重新部署后访问负载均衡的Swagger页面,查看接口列表的地址是否为HTTPS开头。如果已经是HTTPS,说明配置生效,此时发起请求就不会被浏览器拦截了。
为什么Postman能正常访问?因为Postman没有浏览器的混合内容安全限制,不管接口是HTTP还是HTTPS,只要地址正确就能发起请求,但浏览器会严格拦截从HTTPS页面发起的HTTP请求。
内容的提问来源于stack exchange,提问作者user17665907
相关产品推荐
相关产品推荐

