订阅本质上是一个返回 YAML 配置或节点列表的 HTTP 地址。客户端定期请求它, 把返回内容写成配置文件并重载,节点的增删改就自动同步了。

订阅到底是什么

按返回内容划分,常见两种:

  • Clash 订阅 —— 直接返回完整的 config.yaml,客户端原样写入;
  • 通用订阅 —— 返回 Base64 编码的节点列表,需要转换后才能被识别。

链接末尾的查询参数通常包含客户端类型与协议格式,例如 &flag=clash,去掉它可能导致返回格式不匹配。

导入与更新

# 手动验证订阅是否可用
curl -L -o test.yaml "https://example.com/api/v1/client/subscribe?token=xxx"
head -n 5 test.yaml

# 能正常输出 proxies: 或 proxy-groups: 说明格式正确

把该链接填入客户端的订阅管理页面即可。桌面端与移动端的操作入口不同,但逻辑一致。

定时自动更新

推荐把更新间隔设为 24 小时,既能及时同步变化,又不会给服务端带来压力。

场景建议间隔
服务商更新频繁6 ~ 12 小时
日常使用24 小时
按量计费 / 流量敏感72 小时

命令行环境下可以用 cron 定时触发重载:

# 通过 API 触发配置重载
curl -X PUT http://127.0.0.1:9090/configs \
  -H "Content-Type: application/json" \
  -d '{"path":"/etc/clash/config.yaml"}'

# 加入计划任务,每天凌晨 4 点执行一次
0 4 * * * /usr/bin/curl -s -X PUT http://127.0.0.1:9090/configs \
  -H "Content-Type: application/json" \
  -d '{"path":"/etc/clash/config.yaml"}' >/dev/null 2>&1

更新不等于切换:配置重载只替换节点列表,当前选中的节点会被保留;如果该节点在新订阅中已不存在,才会回退到组内第一个可用节点。

查看流量信息

订阅服务通常会在响应头中携带已用流量与到期时间,客户端会解析并显示在订阅卡片上:

subscription-userinfo: upload=1024; download=2048; total=107374182400; expire=1798761600
字段含义
upload / download已用上行 / 下行流量(字节)
total套餐总流量
expire到期时间(Unix 时间戳)

订阅转换与合并

当你手里有多个来源的订阅,希望把它们合并成一个配置时,可以在客户端之外先做转换与合并, 再让内核加载生成的结果。注意这会引入第三方服务,不要把敏感 token 交给来路不明的转换站点

更稳妥的做法是本地合并:把各订阅返回的 yaml 拉取下来,用脚本合并 proxies 数组后重新生成配置文件。

订阅失效怎么办

  • 返回 401 / 403 —— token 过期或被重置,需要重新获取链接;
  • 返回空内容 —— 套餐到期或流量耗尽;
  • 证书报错 —— 检查系统时间是否准确,或服务端证书链不完整;
  • 更新后节点全红 —— 订阅成功但节点不可用,属于服务端问题,先等待或联系服务商。

把订阅链接视为密码。它一旦泄露,别人可以直接消耗你的流量。不要在公开场合粘贴,也不要写进会分享出去的配置文件里。


订阅里的 DNS 与节点配合使用效果更好,见 DNS 配置与防泄漏实践

配置 ← 返回教程列表