跳到主要内容

首页 / 博客 / 配置基础

多订阅管理与合并:proxy-providers 的正确用法

配置基础2026-07-011880 字约 4 分钟
多订阅管理与合并:proxy-providers 的正确用法

手上有两三个订阅是常态:一个主力、一个备用、可能还有个自建的。

在客户端里来回切换配置文件很麻烦,而且切换时会中断所有连接。更好的做法是用 proxy-providers 把它们合并成一份配置

proxy-providers 是什么

它把「节点从哪来」这件事从主配置里剥离出去:主配置只描述策略组和规则,节点由 provider 动态提供。

结构对比传统方式proxies 段写死节点策略组引用节点名订阅一变就要改配置provider 方式节点由 provider 提供
provider 会自己定期更新,主配置永远不用动

基本写法

proxy-providers:
  主力:
    type: http
    url: "https://主力订阅链接"
    interval: 3600
    path: ./providers/main.yaml
    health-check:
      enable: true
      url: http://www.gstatic.com/generate_204
      interval: 300
      lazy: true

  备用:
    type: http
    url: "https://备用订阅链接"
    interval: 3600
    path: ./providers/backup.yaml
    health-check:
      enable: true
      url: http://www.gstatic.com/generate_204
      interval: 600
      lazy: true

proxy-groups:
  - name: "🚀 节点选择"
    type: select
    use: [主力, 备用]          # 使用这两个 provider 的全部节点
    proxies: ["♻️ 自动选择", DIRECT]   # 也可以混入其他条目

  - name: "♻️ 自动选择"
    type: url-test
    use: [主力]
    url: http://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50

字段说明

字段说明
typehttp(远程订阅)/ file(本地文件)/ inline
url订阅地址
interval更新间隔(秒),3600 = 一小时
path本地缓存路径
header自定义请求头,用于指定 User-Agent
filter只保留匹配的节点
exclude-filter排除匹配的节点
exclude-type排除某些协议类型
health-check健康检查配置
override批量覆盖节点属性(Mihomo)

用 filter 清理节点列表

订阅里常混着「剩余流量:xx GB」「距离到期:xx 天」这种伪节点,还有你用不上的地区。

proxy-providers:
  主力:
    type: http
    url: "..."
    interval: 3600
    path: ./providers/main.yaml
    # 只要这些地区
    filter: "(?i)香港|HK|日本|JP|新加坡|SG|美国|US"
    # 排除这些
    exclude-filter: "(?i)剩余|到期|流量|官网|过期|重置|订阅|测试"
    exclude-type: "ss|ssr"       # 排除某些协议
    health-check:
      enable: true
      url: http://www.gstatic.com/generate_204
      interval: 300

User-Agent:拿不到 Clash 格式时用它

有些服务商会根据 UA 返回不同格式的订阅:

proxy-providers:
  主力:
    type: http
    url: "..."
    header:
      User-Agent: ["clash.meta"]

常用取值:clash.metamihomoclash-verge/v2.5.2ClashforWindows/0.19.23

如果 provider 一直加载不出节点,UA 是首要怀疑对象。

health-check:为什么必须开

不开健康检查的话,provider 里的节点没有延迟数据,url-test 组就无从选择。

health-check:
  enable: true
  url: http://www.gstatic.com/generate_204
  interval: 300
  lazy: true
  expected-status: 204     # 期望的状态码

lazy: true 让没有流量经过时跳过检查,省资源。

override:批量修改节点属性

Mihomo 特有,用来统一调整 provider 里所有节点:

proxy-providers:
  主力:
    type: http
    url: "..."
    override:
      udp: true                    # 强制开启 UDP
      skip-cert-verify: false      # 强制校验证书
      additional-prefix: "[主力] "  # 节点名加前缀
      # additional-suffix: " ⚡"

additional-prefix 在多订阅场景下很实用——节点列表里一眼能看出这个节点来自哪个订阅。

一套完整的多订阅配置

proxy-providers:
  A订阅:
    type: http
    url: "https://a.example.com/sub"
    interval: 3600
    path: ./providers/a.yaml
    exclude-filter: "(?i)剩余|到期|官网"
    override:
      additional-prefix: "[A] "
    health-check: { enable: true, url: http://www.gstatic.com/generate_204, interval: 300, lazy: true }

  B订阅:
    type: http
    url: "https://b.example.com/sub"
    interval: 3600
    path: ./providers/b.yaml
    exclude-filter: "(?i)剩余|到期|官网"
    override:
      additional-prefix: "[B] "
    health-check: { enable: true, url: http://www.gstatic.com/generate_204, interval: 600, lazy: true }

proxy-groups:
  # 总开关
  - name: "🚀 节点选择"
    type: select
    proxies: ["♻️ 全局最优", "🅰️ A订阅", "🅱️ B订阅", "🇭🇰 香港", DIRECT]

  # 跨订阅自动选最快
  - name: "♻️ 全局最优"
    type: url-test
    use: [A订阅, B订阅]
    interval: 300
    tolerance: 50
    lazy: true

  # 按订阅分组,方便对比和排查
  - name: "🅰️ A订阅"
    type: url-test
    use: [A订阅]
    interval: 300
    tolerance: 50
  - name: "🅱️ B订阅"
    type: url-test
    use: [B订阅]
    interval: 300
    tolerance: 50

  # 跨订阅按地区分组
  - name: "🇭🇰 香港"
    type: url-test
    use: [A订阅, B订阅]
    filter: "(?i)香港|HK|Hong ?Kong"
    interval: 300
    tolerance: 50

  # 主备切换:A 挂了自动用 B
  - name: "🛡 主备切换"
    type: fallback
    proxies: ["🅰️ A订阅", "🅱️ B订阅"]
    interval: 300
这套配置解决了什么1一份配置管所有订阅不用来回切配置文件,切换不中断连接2跨订阅自动选最优「全局最优」会在两家的节点里挑最快的3按订阅分组便于排查怀疑某家不行时,直接切到那个组测4主备自动切换A 全挂时自动降级到 B5节点名带前缀一眼看出来源

本地文件与内联

本地文件(自己维护的节点):

proxy-providers:
  自建:
    type: file
    path: ./providers/self.yaml
    health-check: { enable: true, url: http://www.gstatic.com/generate_204, interval: 300 }

文件格式:

proxies:
  - name: "我的小鸡"
    type: trojan
    server: my.example.com
    port: 443
    password: "pwd"

内联(直接写在主配置里):

proxy-providers:
  自建:
    type: inline
    payload:
      - name: "我的小鸡"
        type: trojan
        server: my.example.com
        port: 443
        password: "pwd"

排查:provider 加载失败

排查顺序打开 path 指向的缓存文件,看内容是不是正常的 YAML内容是 HTML 页面 —— url 返回的是网页,地址错了或需要登录内容是一长串 base64 —— 订阅格式不对,需要换 Clash 格式的链接文件不存在 —— 下载失败,当前网络访问不了订阅域名文件正常但节点为空 —— filter 正则写得太严,把所有节点都过滤掉了日志切 debug,搜 provider 名字看加载记录

更新不下来的处理

如果订阅地址本身当前网络访问不了,可以给 provider 指定走代理下载。部分版本支持在 provider 里直接写:

proxy-providers:
  主力:
    type: http
    url: "..."
    proxy: DIRECT      # 或指定某个策略组

不支持的话,在客户端的「订阅更新走代理」选项里开启。

和「多份 Profile」的区别

Clash Verge 里可以保存多份配置卡片,点一下切换。这和 proxy-providers 是两种思路:

多份 Profileproxy-providers
切换方式手动点卡片不需要切换
切换代价内核重载,连接中断
节点合并做不到可以跨订阅分组
配置维护每份独立一份主配置
适合场景差异大(工作/家庭规则完全不同)只是节点来源不同

如果只是订阅来源不同、规则一样,用 provider;如果规则也完全不同,用多份 Profile。

小结

  • 多订阅优先用 proxy-providers 合并,不要靠切换配置文件
  • exclude-filter 清掉「剩余流量」这类伪节点
  • health-check 必须开,否则 url-test 没数据
  • 备用订阅的 interval 设长一些,减少无谓连接
  • additional-prefix 标明来源,排查时省事
  • 加载失败先看 path 里的缓存文件长什么样

相关:策略组类型详解节点命名与分组正则


相关文档