You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 01:11:03