手账正文

NO_PROXY 不生效?域名、IP 与网段排除怎么查

NO_PROXY 设置后仍走错路径,先核对列表写的是访问目标还是代理入口,再检查目标的域名、IP 写法和命令行覆盖项。排除条件是否命中,与目标最后能不能访问成功,是需要分别验证的两件事。

作者:小六|资料核对日期:2026年10月29日

本文以 Windows PowerShell 调用 curl.exe 为例。不同软件对代理变量的支持和匹配规则可能不同,下面的写法应按 curl 的范围理解。

NO_PROXY 里应该填哪个地址?

假设本机代理入口是 127.0.0.1:7890,你要访问的是 https://files.example.com/report。排除列表需要检查的是目标 files.example.com,不是因为代理运行在本机,就把所有问题都归到 127.0.0.1 这一项。

换句话说,把本机地址列入排除项,只会影响匹配到该目标的访问,并不会自动排除所有发往本机代理的请求。curl 的代理环境变量说明介绍了 NO_PROXY 对目标主机的作用。

填写时使用逗号分隔目标,先从明确需要排除的地址开始。不要把网页协议、路径和查询参数整串贴入主机列表,也不要用一个过大的范围掩盖单个目标的问题。

域名条目会匹配到哪里?

按照 curl 官方手册,域名条目可以匹配域名本身及其子域,但并不是任意文字包含匹配。

排除条目 在本文讨论的 curl 行为中
example.com 匹配它本身及 files.example.com 等子域
example.com 不会因为名字相似,就匹配 otherexample.com
localhost 先按 URL 中使用的这个主机名核对
127.0.0.1 用于核对相应的 IPv4 地址目标
::1 IPv6 回环地址在排除列表中不加方括号

如果只需要排除 files.example.com 及它下面的子域,可以核对这个更具体的条目;直接写 example.com,覆盖范围会更大。先列出真正要排除的目标,再选择相应域名层级,避免让同一域名下的其他服务一起改变路径。

IPv6 条目的格式见 libcurl 的 NOPROXY 文档。不要把主机名、IP 和完整 URL 的格式混成一套。

curl 在这里支持的通配方式是单独的 *,它会匹配所有目标。*.example.com、正则表达式以及客户端里的其他分流语法,不应直接当作等价写法。

如果只是让某个本地服务不采用代理,把值设成 * 会扩大到全部目标。先检查以前测试留下的这一项,避免误以为只有一个站点受影响。

网段排除,需要确认工具版本

curl 从 7.86.0 开始支持 CIDR 网段写法。例如 192.168.0.0/16 用于匹配对应地址范围,版本条件和说明见前述官方文档。

先用 curl.exe --version 核对实际调用的程序。电脑上有多个 curl 时,某个应用附带的版本,与终端调用的版本未必相同。

IP 和网段示例适合先用 IP 字面量目标核对;如果 URL 使用域名,就先按该域名检查排除条目,不把域名与某次解析出的地址直接当作同一种输入。也不要用整个私有地址模板替代自己实际需要的范围。

在当前 PowerShell 中保留最小范围

下面演示给当前进程设置一份列表,域名只是示例,应替换为自己的明确需求:

$env:NO_PROXY = 'localhost,127.0.0.1,::1,example.com'

先记下原值,再做必要调整。这种设置作用于当前 PowerShell 及其之后启动的子进程,不等于浏览器、已经运行的服务和其他终端都会自动采用它。

如果重点是本地 NAS、打印机或路由器访问,也要确认对应应用是否读取该变量。相关范围可以结合本站局域网访问与 TUN 排除说明理解。

环境变量正确,脚本为什么仍然不同?

检查实际命令有没有 --noproxy。curl 手册说明,它会覆盖 no_proxy、NO_PROXY 环境排除设置;多次提供这个参数时,以最后一次设置为准。

因此,检查脚本、任务启动参数和最终执行的命令结构,比只看终端里保存了什么值更有用。核对时不要把带账号的代理地址或完整环境变量列表发到公开页面。

用明确输出区分代理选择与访问结果

curl 8.7.0 起提供 proxy_used 输出变量,表示该次传输是否使用代理。下面假设你已有本机 HTTP 代理和自己的本地测试服务,两处端口都只是示例:

curl.exe -q --proxy http://127.0.0.1:7890 --noproxy "localhost,127.0.0.1" --max-time 15 --output NUL --write-out "proxy_used=%{proxy_used}\n" http://127.0.0.1:8080/

-q 放在首位,用于避免默认配置文件干扰这次核对;示例里的 --noproxy 则明确指定本次排除范围。proxy_used 的版本和含义可在官方输出字段说明查到。

输出为 0,表示 curl 这次没有使用其代理设置,不代表目标服务必定正常。若本地服务没有启动,仍可能连接失败;先检查错误类型,再检查目标地址和端口。

系统还有 TUN 或其他网关时,这个值也不能证明后续路径一定没有经过节点。可结合代理入口与分流模式指南检查实际接管范围。

若需要先核对 HTTP、SOCKS 和端口类型,可以继续看命令行代理基础检查。想交流排除规则,可以提供版本、目标写法、脱敏后的条目和结果:Telegram 联系我

评论

搜索文章

正在加载搜索…