Sub-Store 节点聚合与清洗完全指南 多机场订阅智能合并重命名正则与去重实战
多位跨国办公与高频科研用户手头往往同时拥有两到三家不同服务商的订阅。有的机场专精香港日本的超低延迟游戏专线,有的机场则拥有海量冷门原生节点适合流媒体解锁。传统做法是在客户端内分别导入三个订阅,策略组里密密麻麻充斥着几百个命名规则完全不同的节点。不仅查找极度混乱,不同机场夹带的“官网地址”“续费提醒”“剩余流量”等无效公告节点还会持续触发客户端测速超时,严重浪费系统资源并干扰自动选路。
Sub-Store 正是解决多订阅管理痛点的终极中枢。它不仅支持把多个机场的原生订阅合并为一个干净的托管链接,还允许挂载基于正则表达式的节点操作流,实现自动去重、统一地域标签、剔除无效垃圾节点以及按需下发特定协议。
Sub-Store 架构拓扑与处理管道
把 Sub-Store 视作一个运行在客户端与机场服务器之间的智能代理网关。所有上游数据先经过它的清洗管道加工,最终输出为标准化的干净配置。
┌────────────────────────────────┐ │ 机场 A 订阅 (含倍率、官网节点) │ └───────────────┬────────────────┘ │ ▼ ┌────────────────────────────────┐ │ 机场 B 订阅 (命名不规范、含 Vless)│ └───────────────┬────────────────┘ │ ▼┌────────────────────────────────────────────────────────────────────────┐│ Sub-Store 处理管道 (Pipeline) ││ ││ 1. 订阅拉取与协议解析 ──> 2. 正则过滤垃圾公告 ──> 3. 正则标准化重命名 ││ │ ││ 4. 目标客户端格式渲染 <── 3. 跨机场同节点智能去重 <──┘ │└───────────────────────────────────┬────────────────────────────────────┘ │ ▼┌────────────────────────────────────────────────────────────────────────┐│ 输出标准化纯净订阅 (供 Clash Verge Rev / Mihomo Party / 路由器直接消费) │└────────────────────────────────────────────────────────────────────────┘这个管道确保无论上游机场的原始节点名称多么冗长、标签多么混乱,最终流入客户端的节点都整齐划一,便于策略组编写通用规则。
本地与私有 Docker 部署方案
Sub-Store 可以在网页端纯前端运行,但为了让自动化定时更新稳定生效,并在本地网络中提供长效订阅解析服务,强烈推荐使用 Docker 将其容器化部署在软路由或 NAS 设备中。
Docker Compose 极速拉起
在服务器或本地软路由上创建专属工作目录,编写部署文件。
version: '3.8'services: sub-store: image: xream/sub-store:latest container_name: sub-store restart: unless-stopped network_mode: host environment: - SUB_STORE_BACKEND_API_PORT=3001 - SUB_STORE_FRONTEND_BACKEND_PATH=/2b9f8d1c7e - SUB_STORE_BACKEND_SYNC_CRON=0 */6 * * * volumes: - ./data:/opt/app/data这里将内部端口指定为 3001,并开启了宿主机网络模式。环境变量 SUB_STORE_FRONTEND_BACKEND_PATH 为自定义安全路径,能有效防止他人扫描到未授权的公网接口。挂载的 ./data 目录负责持久化存储所有的订阅源与节点清洗规则。
运行启动指令完成拉起。
docker compose up -ddocker compose logs -f sub-store服务就绪后,在浏览器直接访问宿主机 IP 加上端口即可进入图形化操作面板。
节点清洗三部曲 过滤、去重与重命名
将多个机场导入 Sub-Store 后,首要目标是剔除噪音并统一节点命名规范。这可以通过 Sub-Store 强大的节点操作符节点(Node Operators)分步完成。
第一阶段 剔除无效信息与垃圾公告
绝大多数商业机场都会在节点列表顶部或尾部附带大量无关通知。这些条目并非真实代理服务器,测速时必定报红超时。
在 Sub-Store 集合中新建一个操作器,选择节点过滤(Filter Nodes),设定过滤模式为排除匹配项,填入经过实战检验的高效正则表达式。
(官网|公告|续费|剩余|到期|通知|群|返利|防失联|维护|测试|网址|请勿|Traffic|Expire|Website)启用该规则后,所有包含上述关键字的虚假节点将被瞬间切除,不会进入后续的传输链条。
第二阶段 跨机场节点智能去重
如果用户同时购买了两个主流大机场,两家服务商的某些优质节点可能来自同一家机房的上游批发商,其落地出口 IP 完全一致。当这类重复节点同时进入自动测速策略组时,不仅平白增加了一倍测速流量,还会导致负载均衡模式下流量分配不均。
在过滤操作器后追加一个去重操作符(Deduplicate)。去重依据选择服务器地址与端口(Server and Port),或者选择节点名称。系统会自动保留延迟更优或排在前面的唯一条目,将重复冗余连接全部抹平。
第三阶段 正则表达式标准化重命名
机场服务商的命名风格千奇百怪。有的加上大量国旗 Emoji,有的带有括号标记的专线倍率,有的则混杂了服务商自身的英文缩写。如果不对其进行标准化,客户端中配置的按地区分流规则将极易遗漏节点。
在操作流中增加重命名操作符(Rename Nodes),利用正则表达式的分组捕获功能实施统一规范。
| 原始混乱命名格式示范 | 匹配清洗正则表达式 | 目标标准化输出格式 |
|---|---|---|
🇭🇰 香港 01 [IEPL专线 2.0x] | `^.*(香港 | HK |
[BGP] 日本东京 03 高速 | `^.*(日本 | JP |
US_01_洛杉矶_BGP_1.5x | `^.*(美国 | US |
🇸🇬 新加坡 02 原生IP | `^.*(新加坡 | SG |
通过简单的正则捕获组 $1 与 $2,原本长短不一、符号杂乱的节点列表被重整为格式严格对称的工业级命名。这为下一步编写精简的 Clash 策略组奠定了完美基础。
节点属性注入与自定义倍率标记
很多高端机场会针对不同线路设置计费倍率。普通节点是一倍计费,超高带宽的全球骨干专线可能是三倍甚至五倍。如果在日常看 4K 视频时误选了五倍率节点,套餐内的几百 G 流量可能半天就会消耗殆尽。
Sub-Store 支持在清洗阶段通过自定义脚本或操作符将倍率信息提炼为节点属性。
在操作器中添加一个脚本操作符(Script Operator),编写一段轻量 Javascript 逻辑,自动识别节点名称中的倍率文本并打上标记。
function operator(proxies) { return proxies.map(proxy => { // 匹配如 3x、0.5x、2.0x 的倍率标记 const rateMatch = proxy.name.match(/([0-9]+(?:\.[0-9]+)?)\s*[xX倍]/); if (rateMatch) { proxy.rate = parseFloat(rateMatch[1]); // 将高倍率节点前置预警标签,提醒用户注意 if (proxy.rate >= 2.0) { proxy.name = `[${proxy.rate}x高倍率] ` + proxy.name; } } else { proxy.rate = 1.0; } return proxy; });}执行该脚本后,所有两倍率以上的昂贵节点都会在前端呈现醒目的视觉标识,便于在 Clash 策略组中单独归类,防止意外走高额计费线路。
生成目标客户端纯净托管链接
当节点经过过滤、去重、标准化改名以及倍率标记之后,Sub-Store 内就已经拥有了一个结构极其完美的聚合数据源。接下来需要将它导出为 Clash 内核或 Mihomo 内核能够无缝识别的订阅。
在 Sub-Store 界面点击创建同步工件(Artifact),关联刚刚定义好的节点集合。
Sub-Store 最终生成链接范式http://127.0.0.1:3001/download/collection/MyCleanNodes?target=ClashMeta在参数中直接指定目标平台为 ClashMeta 或 Clash。Sub-Store 会在远端请求到达的瞬间,将内存中处理好的节点对象动态编译为符合标准规范的 YAML 格式文本,包含节点类型、加密方式、密码、UUID、TLS 域名伪装以及网络传输配置等全套必要字段。
客户端联动与自动化静默更新
在客户端如 Clash Verge Rev 中,不再分别填写各个机场的初始链接,而是直接将 Sub-Store 产出的这个动态 Artifact URL 添加为远程订阅。
# 客户端外部扩展配置片段proxy-providers: sub_store_provider: type: http url: "http://127.0.0.1:3001/download/collection/MyCleanNodes?target=ClashMeta" interval: 86400 path: ./profiles/sub_store_clean.yaml health-check: enable: true interval: 600 url: http://www.gstatic.com/generate_204这种架构的优势非常显著。当某家机场更换了订阅域名或更新了服务器底层密码时,用户只需在 Sub-Store 后台更新该机场的订阅地址,客户端无需做任何二次改动。客户端下一次轮询更新时,收到的依然是经过既定正则规则过滤重命名后的完美节点列表,现有的策略组与分流规则百分之百平滑兼容。
常见问题解答与故障排查
用户在初次使用 Sub-Store 构建节点管道时,经常遇到一些环境或语法细节障碍。这里整理出高频疑问并给出针对性排查思路。
为什么导入 Sub-Store 后部分特殊协议节点丢失
部分机场采用新型前沿协议如 Hysteria2 或 TUIC。如果在生成订阅工件时参数设定为了旧版 target=Clash,旧版转换器无法识别这些新协议,会自动将其判定为不合规节点并做抛弃处理。
将生成目标参数显式更改为 target=ClashMeta 或 target=SingBox,即可完整保留所有前沿低延迟高吞吐协议。
正则表达式写错导致节点全部消失该如何恢复
在 Sub-Store 中编写节点操作符时,任何正则表达式语法的微小失误,例如缺少右括号或转义符书写错误,都会导致整个管道匹配中断,输出为空节点数组。
排查时建议依次禁用操作符,利用 Sub-Store 自带的实时预览(Preview)窗口单步排查。先验证排除垃圾节点的正则,确认节点数量正常减少之后,再逐步挂载标准化重命名的正则规则。
Docker 容器重启后之前配置的订阅全部丢失
这是因为在运行 Docker 容器时未正确配置本地数据卷挂载。必须确保容器内部的 /opt/app/data 目录准确映射到了宿主机的物理磁盘路径。只有持久化卷正确落地,所有的订阅配置与正则过滤器才会在容器升级重启后完整保留。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!














