最后更新于:2026年7月

subconverter进阶
subconverter 进阶:自建转换服务,打造专属订阅管理中枢

还在用别人的 subconverter 公共服务? 公共服务有三个硬伤:速度慢(排队转换)、不稳定(经常挂)、不安全(你的订阅链接明文传给第三方)。2026 年了,自建一个 subconverter 服务的成本已经低到忽略不计——一台最低配的 VPS,甚至一个 Cloudflare Worker 就能跑。

本文是 subconverter 的进阶指南,假设你已经了解基础用法。如果你是新手,建议先看 订阅转换完全指南 打好基础。

【本文适合谁?】

  • 有多个机场订阅,想统一管理的用户
  • 想自定义分流规则和节点分组的进阶用户
  • 有 VPS,想自建订阅转换服务的技术爱好者
  • 追求隐私安全,不想把订阅链接交给第三方的用户

一、为什么要自建 subconverter?

1.1 公共服务的三大问题

问题描述影响
速度慢公共服务用户多,转换要排队更新订阅等几十秒甚至超时
不稳定免费服务没保障,随时可能关停某天突然发现订阅不更新了
不安全订阅链接明文传给第三方节点信息泄露,被盗用风险

1.2 自建的好处


二、Docker 自建 subconverter 服务

2.1 最简部署:一条命令搞定

如果你已经有 Docker 环境,一条命令就能跑起来:

BASH
docker run -d \
  --name subconverter \
  --restart always \
  -p 25500:25500 \
  -v /opt/subconverter:/subconverter \
  tindy2013/subconverter:latest

访问 http://你的IP:25500 看到版本信息,说明启动成功。

2.2 Docker Compose 部署(推荐)

更规范的方式是用 Docker Compose:

YAML
version: '3'
services:
  subconverter:
    image: tindy2013/subconverter:latest
    container_name: subconverter
    restart: always
    ports:
      - "25500:25500"
    volumes:
      - ./config:/subconverter
    environment:
      - TZ=Asia/Shanghai

启动:

BASH
docker-compose up -d

2.3 配置文件详解

subconverter 的核心配置文件是 pref.toml(或 pref.ini)。从 Docker 容器中复制默认配置:

BASH
docker cp subconverter:/subconverter/pref.toml ./pref.toml

关键配置项:

TOML
[common]
# 服务监听地址
address = "0.0.0.0"
# 服务端口
port = 25500

[managedconfig]
# 是否开启缓存
enable_cache = true
# 缓存时间(秒)
cache_expire = 3600

[userinfo]
# 流量信息显示
enable_flow = true
enable_expire = true

[emojiflag]
# 节点名添加国旗 emoji
enable = true

2.4 加上 HTTPS(重要)

订阅链接建议走 HTTPS。用 Nginx 反代 + Let’s Encrypt 证书:

NGINX
server {
    listen 443 ssl http2;
    server_name sub.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/sub.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/sub.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:25500;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

用 certbot 申请免费证书:

BASH
certbot --nginx -d sub.yourdomain.com

三、自定义规则集与分组策略

这是自建 subconverter 最强大的功能——完全自定义分流规则和节点分组。

3.1 规则集配置文件

subconverter 支持外部规则集文件。在 pref.toml 中配置:

TOML
[clash_rule_base]
base_path = "config/rule/"

3.2 自定义 Clash 配置模板

创建一个自定义模板文件 config/clash/custom.yaml

YAML
# 自定义 Clash 配置模板
port: 7890
socks-port: 7891
allow-lan: true
mode: rule
log-level: info

dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://1.1.1.1/dns-query
    - https://8.8.8.8/dns-query

# 代理组定义 - subconverter 会自动填充节点
proxy-groups:
  - name: "🚀 节点选择"
    type: select
    proxies:
      - ♻️ 自动选择
      - 🎯 故障转移
      - 🌍 国外媒体
      - DIRECT

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

  - name: "🎯 故障转移"
    type: fallback
    url: "http://www.gstatic.com/generate_204"
    interval: 60

  - name: "🌍 国外媒体"
    type: select
    proxies:
      - 🚀 节点选择
      - ♻️ 自动选择

# 分流规则
rules:
  # 流媒体
  - DOMAIN-SUFFIX,netflix.com,🌍 国外媒体
  - DOMAIN-SUFFIX,nflxvideo.net,🌍 国外媒体
  - DOMAIN-SUFFIX,youtube.com,🚀 节点选择
  - DOMAIN-SUFFIX,googlevideo.com,🚀 节点选择
  - DOMAIN-SUFFIX,disney.com,🌍 国外媒体
  - DOMAIN-SUFFIX,hbomax.com,🌍 国外媒体

  # 社交媒体
  - DOMAIN-SUFFIX,twitter.com,🚀 节点选择
  - DOMAIN-SUFFIX,x.com,🚀 节点选择
  - DOMAIN-SUFFIX,telegram.org,🚀 节点选择

  # AI 服务
  - DOMAIN-SUFFIX,openai.com,🚀 节点选择
  - DOMAIN-SUFFIX,anthropic.com,🚀 节点选择
  - DOMAIN-SUFFIX,claude.ai,🚀 节点选择

  # 国内直连
  - DOMAIN-SUFFIX,cn,DIRECT
  - GEOIP,CN,DIRECT

  # 兜底
  - MATCH,🚀 节点选择

3.3 在订阅链接中使用自定义模板

PLAINTEXT
https://sub.yourdomain.com/sub?target=clash&
  url=你的订阅链接&
  config=https://raw.githubusercontent.com/你的仓库/custom.yaml&
  emoji=true&
  udp=true&
  tfo=true

关键是 config 参数指向你的自定义模板。

3.4 多套规则模板

你可以准备多套模板,不同场景用不同模板:

模板名适用场景特点
minimal.yaml日常使用规则精简,速度快
streaming.yaml看视频流媒体分流详细
gaming.yaml打游戏游戏域名直连/低延迟
ai.yamlAI 开发AI 服务专用节点
full.yaml全功能规则最全,适合折腾

切换模板只需要改订阅链接里的 config 参数。


四、多订阅源合并与去重

4.1 合并多个机场订阅

如果你有多个机场的订阅,可以合并成一个订阅链接。用 | 分隔多个订阅 URL:

PLAINTEXT
https://sub.yourdomain.com/sub?target=clash&
  url=订阅A|订阅B|订阅C&
  config=你的模板

subconverter 会把三个订阅的节点合并到一起。

4.2 节点去重

多个机场可能有重复的节点(比如都用同一个机房)。开启去重:

PLAINTEXT
https://sub.yourdomain.com/sub?target=clash&
  url=订阅A|订阅B&
  config=你的模板&
  rename=1&
  dev_id=true

4.3 节点重命名

不同机场的节点命名风格不一致,看起来很乱。用 rename 参数统一命名:

PLAINTEXT
&rename=原名@新名

批量重命名示例:

PLAINTEXT
&rename=香港@🇭🇰 香港&rename=日本@🇯🇵 日本&rename=新加坡@🇸🇬 新加坡&rename=美国@🇺🇸 美国

4.4 节点筛选过滤

只保留特定地区的节点:

PLAINTEXT
# 只保留日本和新加坡节点
&include=日本|新加坡

# 排除某些节点
&exclude=过期|官网|流量

# 正则过滤
&filter=(日本|新加坡).*(IEPL|IPLC)

五、性能优化与缓存配置

5.1 开启缓存

转换订阅需要抓取原始订阅、解析、转换,比较耗时。开启缓存后,相同请求直接返回缓存结果。

pref.toml 中:

TOML
[managedconfig]
enable_cache = true
cache_expire = 3600  # 缓存1小时

或者在订阅链接中加参数:

PLAINTEXT
&cache_expire=3600

5.2 数据库缓存(高级)

对于大量用户场景,可以用 Redis 做缓存:

YAML
# docker-compose.yml
version: '3'
services:
  subconverter:
    image: tindy2013/subconverter:latest
    depends_on:
      - redis
    ports:
      - "25500:25500"
    volumes:
      - ./config:/subconverter

  redis:
    image: redis:alpine
    restart: always
    volumes:
      - redis-data:/data

volumes:
  redis-data:

5.3 CDN 加速

在你的 Nginx 前面再套一层 Cloudflare CDN:

  1. 域名 DNS 解析到 Cloudflare
  2. 开启缓存规则:
    • /sub?* 缓存 30 分钟
    • 静态资源缓存 1 天

这样即使原始订阅更新了,CDN 缓存没过期也不会重新转换,大幅降低服务器负载。

5.4 性能对比

方案转换耗时并发能力适用场景
无缓存3-8 秒测试调试
内存缓存首次 3 秒,后续 <100ms个人使用
Redis 缓存首次 3 秒,后续 <50ms多人共享
CDN + 缓存首次 3 秒,后续 <10ms极高大量用户

六、多客户端适配

subconverter 支持转换成多种客户端格式。

6.1 支持的输出格式

target 值客户端格式
clashClash / MihomoYAML
clashrClash RYAML
surge&ver=4Surge 4INI
quanQuantumultINI
quanxQuantumult XINI
loonLoonINI
ssShadowsocksSIP008
ssrShadowsocksRSSR
ssdSSDJSON
singboxSing-BoxJSON
v2rayV2RayJSON

6.2 Clash / Mihomo 适配

PLAINTEXT
https://sub.yourdomain.com/sub?target=clash&
  url=你的订阅&
  config=你的模板&
  emoji=true&
  udp=true&
  tfo=true&
  append_type=true&
  fdn=true

关键参数:

参数作用推荐值
emoji节点名加国旗true
udp开启 UDPtrue
tfoTCP Fast Opentrue
append_type节点名加协议类型true
fdn过滤不可用节点true

6.3 Sing-Box 适配

Sing-Box 的配置格式和 Clash 完全不同,但 subconverter 可以自动转换:

PLAINTEXT
https://sub.yourdomain.com/sub?target=singbox&
  url=你的订阅&
  config=你的singbox模板

Sing-Box 模板示例(JSON 格式):

JSON
{
  "log": {
    "level": "info"
  },
  "dns": {
    "servers": [
      {"address": "https://dns.alidns.com/dns-query"},
      {"address": "https://1.1.1.1/dns-query", "detour": "proxy"}
    ]
  },
  "inbounds": [
    {
      "type": "tun",
      "interface_name": "singbox-tun",
      "inet4_address": "172.19.0.1/30"
    }
  ],
  "outbounds": [
    {"type": "selector", "tag": "proxy"},
    {"type": "urltest", "tag": "auto"},
    {"type": "direct", "tag": "direct"},
    {"type": "block", "tag": "block"}
  ]
}

6.4 Shadowrocket 适配

PLAINTEXT
https://sub.yourdomain.com/sub?target=ss&
  url=你的订阅&
  emoji=true

Shadowrocket 支持直接导入 SS 链接,也支持 Clash 格式的配置文件。

6.5 一键生成所有客户端订阅

如果你同时用多个设备,可以用 subconverter 的配置文件管理功能,一键生成所有格式。

pref.toml 中配置 managed_config

TOML
[managedconfig]
# 生成 Clash 订阅
clash = "https://sub.yourdomain.com/sub?target=clash&url=SUB_URL&config=TEMPLATE"
# 生成 Sing-Box 订阅
singbox = "https://sub.yourdomain.com/sub?target=singbox&url=SUB_URL&config=TEMPLATE"
# 生成 Surge 订阅
surge = "https://sub.yourdomain.com/sub?target=surge&ver=4&url=SUB_URL&config=TEMPLATE"

七、自动化:定时更新与通知

7.1 定时刷新订阅缓存

用 crontab 定时触发缓存刷新:

BASH
# 每 30 分钟刷新一次
*/30 * * * * curl -s "https://sub.yourdomain.com/sub?target=clash&url=你的订阅&config=模板&force_refresh=true" > /dev/null

7.2 节点变更通知

用脚本检测节点变化,有变动时发 Telegram 通知:

PYTHON
#!/usr/bin/env python3
import requests
import json
import hashlib

# 配置
SUB_URL = "你的订阅链接"
BOT_TOKEN = "你的Telegram Bot Token"
CHAT_ID = "你的Chat ID"

def get_nodes_hash():
    """获取当前节点列表的哈希值"""
    resp = requests.get(SUB_URL)
    return hashlib.md5(resp.text.encode()).hexdigest()

def send_telegram(message):
    """发送 Telegram 通知"""
    url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
    data = {"chat_id": CHAT_ID, "text": message}
    requests.post(url, data=data)

# 读取上次哈希
try:
    with open("/tmp/nodes_hash.txt", "r") as f:
        old_hash = f.read().strip()
except:
    old_hash = ""

# 获取当前哈希
new_hash = get_nodes_hash()

# 对比
if new_hash != old_hash:
    send_telegram("⚠️ 订阅节点有变更!请检查你的节点列表。")
    with open("/tmp/nodes_hash.txt", "w") as f:
        f.write(new_hash)

加入 crontab:

BASH
# 每小时检查一次
0 * * * * python3 /opt/subconverter/check_nodes.py

八、安全加固

8.1 添加访问密码

不希望别人用你的 subconverter?加个密码:

在 Nginx 中配置基本认证:

BASH
# 生成密码文件
htpasswd -c /etc/nginx/.htpasswd your_username

# Nginx 配置
location / {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    proxy_pass http://127.0.0.1:25500;
}

8.2 限制访问频率

防止滥用:

NGINX
# Nginx 限流
limit_req_zone $binary_remote_addr zone=sub:10m rate=10r/m;

location /sub {
    limit_req zone=sub burst=5 nodelay;
    proxy_pass http://127.0.0.1:25500;
}

8.3 只允许自己的客户端访问

如果你的客户端 IP 固定,可以加白名单:

NGINX
location / {
    allow 1.2.3.4;      # 你的 IP
    allow 192.168.0.0/16; # 内网
    deny all;
    proxy_pass http://127.0.0.1:25500;
}

九、常见问题排查

9.1 转换失败

原因解决方法
原始订阅链接失效检查订阅链接是否能正常访问
网络不通服务器是否能访问订阅源
格式不支持检查 target 参数是否正确
模板配置错误检查 config 模板 URL 是否有效

9.2 节点数量不对

原因解决方法
过滤规则太严检查 include/exclude 参数
去重导致合并关闭 dev_id 参数测试
机场限制了 IP换一个 IP 获取订阅

9.3 速度慢

原因解决方法
没开缓存开启 enable_cache
服务器配置低升级 VPS 或用 CDN
原始订阅慢用缓存减少请求频率

十、总结

10.1 自建 subconverter 的成本

项目费用
最低配 VPS$2-3/月
域名$1/月(年付 $10 左右)
Cloudflare CDN免费
Let’s Encrypt 证书免费
合计约 $3-4/月

10.2 完整方案架构

PLAINTEXT
机场订阅 A ─┐
机场订阅 B ─┼──→ subconverter(转换)──→ Clash 配置
机场订阅 C ─┘         │                 ──→ Sing-Box 配置
                      │                 ──→ Shadowrocket 配置
                      │
                   Redis 缓存
                      │
                   Cloudflare CDN
                      │
                   你的所有设备

10.3 学习路径

  1. 第一步:Docker 部署 subconverter,用默认配置跑通
  2. 第二步:加 HTTPS,配置域名访问
  3. 第三步:自定义规则模板,实现个性化分流
  4. 第四步:多订阅合并,统一管理所有机场
  5. 第五步:缓存优化 + CDN 加速,提升性能
  6. 第六步:安全加固 + 自动化通知

【相关推荐】


自建 subconverter 是代理进阶的必经之路。一次部署,长期受益。今天就动手搭一个属于自己的订阅转换服务吧。🚀

版权声明

作者: 易邦

链接: https://blog.e8k.net/posts/subconverter-advanced-2026/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。