TL;DR:proxy-providers 为空先不要怀疑整份 YAML。按 URL 返回内容、path 写入、provider 名称、group use、health-check 和 filter 六项查,基本能定位。

Clash / Mihomo 的 provider 机制很适合把节点列表和主配置拆开,但它也让错误多了一层。主配置启动正常,不代表 provider 已经加载;provider 文件下载成功,也不代表分组真的用了它。

先看这张表

检查项正常表现异常表现
URL返回 provider YAML返回 HTML、空文本、登录页
path本地生成缓存文件权限不足、目录不存在
interval能按周期更新过短导致频繁失败
health-check只影响可用性检测URL 错或超时让节点灰掉
filter只筛目标节点正则过严导致列表为空
group use分组引用 provider名称不一致,分组无节点

provider 为空最常见的是 URL 拿错。很多订阅地址返回完整配置,而 proxy-providers 期待 provider 片段;两者结构不同,不能互换。

URL 与 path

先把 provider URL 单独打开,正文里应能看到节点列表。若返回 <html>、错误提示或完整 Clash 配置,都要回订阅后台换「provider」或「Clash 节点列表」格式。path 是本地缓存文件,OpenClash、Docker、NAS 上要确认目录存在且进程可写。

如果你还没有确定订阅格式,使用兼容 Clash / Singbox / V2Ray 的订阅时也要区分「完整 Clash YAML」和「proxy-provider 片段」,这两种不是同一个入口。

group use 不能写错

示例结构大致如下:

proxy-providers:
  main-provider:
    type: http
    url: https://example.com/provider.yaml
    path: ./providers/main.yaml
    interval: 3600
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 600

proxy-groups:
  - name: Auto
    type: url-test
    use:
      - main-provider

use 里的 main-provider 必须和上方 key 完全一致。大小写、下划线、短横线不一致,Mihomo 不会猜你的意思。

排查清单

  • provider URL 可直接下载,状态码不是 301 循环或 403。
  • 文件正文不是完整配置里的 proxy-groupsrules 大包。
  • path 所在目录存在,客户端有写入权限。
  • filter 先临时注释,排除正则筛空。
  • health-check.url 使用轻量可访问地址。
  • 分组里写的是 use,不是把 provider 名称塞进 proxies

排查时的优先级

遇到 Clash YAML provider 为空 相关问题时,先固定一个可复现样本,再改配置。不要凭感觉同时换设备、地区、账号和客户端。对“维护 Clash、Mihomo、Clash Verge Rev 或 OpenClash YAML 的用户”来说,最省时间的方法是按“现象、范围、最近变更、可回滚动作”四步记录。

步骤要确认什么
现象是报错、限速、空白页、扣费异常,还是权限不足
范围只影响一个账号/设备,还是同一批任务都失败
变更最近是否改过版本、地区、套餐、密钥或规则
回滚能否回到上一个正常状态并复测

什么时候停止继续试错

如果同一问题连续试了三种方案仍无改善,先停下来整理证据。把错误截图、时间、账号地区、请求 id、订单号或配置片段放在一起,再决定是联系官方支持、换备用路径,还是回退到旧方案。客户端、协议、规则和网络工具配置 里的很多问题不是单点开关能解决,复盘记录比继续乱改更重要。

相关阅读

FAQ

provider 文件需要手动创建吗? 通常不需要,客户端会下载并缓存;但目录必须存在且可写。

为什么日志说更新成功,界面还是空? 可能 provider 有内容,但当前分组没有引用它,或被 filter 全部排除。

完整 Clash YAML 能当 provider 吗? 不建议。provider 只需要节点列表结构,完整配置应作为 profile 导入。