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

.NET6/.NET Core HttpClient在Linux下未遵循子域名no_proxy设置

问题表现
  • 部署在企业内网Linux环境的多台ASP.NET Core服务需要互相通信,宿主机已提前配置http_proxy、no_proxy全局环境变量
  • 服务间通过HttpClient发起内网请求时持续返回504 Gateway错误,链路追踪确认请求未直连目标内网服务,而是被转发到了配置的代理网关
根因说明

Linux平台下.NET 6、.NET Core版本的HttpClient内置代理规则匹配逻辑存在缺陷:无法正确识别no_proxy配置中的子域名通配规则,导致符合内网直连要求的请求未遵循no_proxy设置,错误走代理链路最终请求失败。

可行修复方案
  • 显式配置HttpClient代理绕过规则
    服务注册HttpClient时手动指定代理配置与绕过列表,不依赖运行时默认的环境变量解析逻辑,参考实现:
    services.AddHttpClient("InternalApiClient")
        .ConfigurePrimaryHttpMessageHandler(() =>
        {
            var proxyAddress = Environment.GetEnvironmentVariable("http_proxy");
            var proxy = new WebProxy(new Uri(proxyAddress))
            {
                BypassProxyOnLocal = true,
                // 按实际内网地址段、域名后缀配置绕过规则
                BypassList = new string[]
                {
                    "*.intra.corp",
                    "10.*",
                    "172.16.*",
                    "192.168.*"
                }
            };
            return new HttpClientHandler
            {
                Proxy = proxy,
                UseProxy = true
            };
        });
    
  • 调整no_proxy环境变量写法
    将no_proxy中带前缀.的域名规则修改为无前缀格式,例如将原规则.intra.corp改为intra.corp,该格式可被.NET 6/.NET Core的默认匹配逻辑正确识别,自动覆盖所有子域名的直连规则。
  • 升级运行时版本
    升级服务运行时到.NET 7及以上版本,该版本已修复Linux平台下no_proxy子域名匹配的已知问题,无需额外代码配置即可正确遵循系统代理规则。

注意:无论采用哪种方案,修改配置后都需要完整重启ASP.NET Core进程,代理相关环境变量仅在进程启动时加载一次,运行时修改不会动态生效。

内容的提问来源于stack exchange,提问作者csnemes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:54:29