一、为什么需要 Proxy Provider
Clash 的 proxy-provider 可以让我们从远程 URL 拉取节点列表,极大地方便了多设备间的节点同步。通常大家会选择将节点配置上传到 GitHub Gist 等公开平台,但这意味着:
- 节点信息暴露在公网
- 任何人都能通过链接订阅你的节点
- Gist 可能因为“内容违规”被删除
更好的方式是自己搭建一个私有订阅服务。本文介绍如何利用 Cloudflare Workers 实现一个带 Token 鉴权的、安全可控的 Proxy Provider,彻底告别安全隐患。
二、方案概览
整体流程如下:
- 准备好 Clash 节点列表(YAML 格式)并转为 base64。
- 在 Cloudflare Workers 中新建一个 Worker,写入简单的鉴权读取代码。
- 设置两个环境变量:
SECRET_TOKEN(访问密钥)和CONFIG_DB(base64 后的节点配置)。 - Worker 收到请求时校验
token参数,匹配则返回配置内容。 - 在 Clash 配置中,通过
proxy-provider指向 Worker 的地址即可。
全程无需数据库,无需服务器,完全依托 Cloudflare 的边缘网络,安全、快速。
三、准备工作
3.1 准备节点配置并 Base64 编码
Clash 的 proxies 中,配置必须是 YAML 格式。不过对于订阅来说 mihomo (Clash.Meta) 和 sing-box 都对 Base64 订阅提供了非常好的原生支持。
proxies:
- name: "日本-VLESS"
type: vless
server: 1.2.3.4
port: 443
uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
tls: true
network: tcp
servername: example.com
flow: xtls-rprx-vision
client-fingerprint: chrome
reality-opts:
public-key: xxxxxxxxxxxxxxxxxx
short-id: xxxxxxxx
我们可以将上面的 YAML 链接转换为如下 vless:// 内容,保存为 proxies.txt。
vless://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@1.2.3.4:443?encryption=none&security=reality&sni=example.com&fp=chrome&type=tcp&flow=xtls-rprx-vision&pbk=xxxxxxxxxxxxxxxxxx&sid=xxxxxxxx#日本-VLESS
如果你的节点不止一个,在
vless://列表下提行后继续添加即可。后续步骤会将这整个文件进行 base64 编码。
在 Windows 终端中执行以下命令,将文件转换为 base64 字符串并复制结果:
$raw = Get-Content -Raw -Encoding UTF8 proxies.txt
$raw = $raw.TrimEnd("`r", "`n")
$base64 = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($raw))
$base64 | Set-Clipboard
得到的这一长串文字就是要在 Workers 中使用的 CONFIG_DB 的值。
3.2 注册 Cloudflare 账号
访问 Cloudflare 官网 注册并登录。本文操作主要在 Workers & Pages 菜单中完成。
四、创建与部署 Worker
4.1 新建 Worker
在 Cloudflare 仪表板中,点击左侧 Workers & Pages,然后选择 创建 → 创建 Worker。为你的 Worker 起一个名字,例如 clash-provider,然后点击 部署(可以先跳过代码,后面再修改)。
4.2 编辑代码
点击刚刚创建的 Worker,进入 快速编辑 或在线编辑器,将默认代码替换为以下内容:
export default {
async fetch(request, env) {
const url = new URL(request.url);
if (url.searchParams.get("token") !== env.SECRET_TOKEN) {
return new Response("Unauthorized", { status: 401 });
}
const data = env.CONFIG_DB;
if (!data) {
return new Response("Not Found", { status: 404 });
}
return new Response(data, {
headers: {
"Content-Type": "text/plain; charset=utf-8",
"Cache-Control": "no-store",
},
});
},
};
这段代码的作用:校验请求中的
token参数,通过后直接返回CONFIG_DB的原始内容(即 base64 字符串)。
4.3 设置环境变量
在 Worker 的 设置 → 变量 中,添加以下两个 环境变量:
SECRET_TOKEN:类型选 加密(推荐),值为你自己设定的一串复杂随机字符串,例如MyS3cretToK3n2026。CONFIG_DB:类型选 纯文本(也可加密,但内容较长,纯文本足够),值粘贴之前生成的 base64 字符串。
点击 保存并部署。
4.4 测试访问
Worker 部署成功后,你会得到一个 *.workers.dev 的免费域名,例如 https://clash-provider.你的用户名.workers.dev。在浏览器中直接访问会显示 Unauthorized,加上正确的 token 才能看到内容:
https://clash-provider.你的用户名.workers.dev/?token=MyS3cretToK3n2026
如果返回一大串 base64 文本,说明配置正确。
五、在 Clash 中使用
5.1 配置 proxy-provider
打开你的 Clash/Mihomo 配置文件,在 proxy-providers 部分添加如下内容:
proxy-providers:
my-private-provider:
type: http
url: "https://clash-provider.你的用户名.workers.dev/?token=MyS3cretToK3n2026"
path: ./providers/private.yaml
interval: 3600
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 300
path指定本地缓存路径,避免每次都远程请求。interval决定拉取更新频率(单位秒),根据需求调整。
5.2 使用与验证
在 proxy-groups 中引用这个 provider,重启 Clash 或热加载配置,就能在面板中看到从 Workers 拉取下来的节点。一切都在加密信道上传输,且必须携带 token,安心程度远高于公开 Gist。
六、进阶优化与注意事项
6.1 更新节点配置
当节点发生变化时,只需重新生成 base64 字符串,更新 Worker 中 CONFIG_DB 变量的值并重新部署。客户端会在下次 interval 到期时自动获取最新列表,无需手动替换每个设备。
6.2 绑定自定义域名
workers.dev 域名在国内访问有时不稳定,建议在 Worker 的 触发器 中绑定自己的域名(需通过 Cloudflare DNS 解析)。
6.3 更严密的安全措施
- Token 越长越复杂越好,可以定期更换并同步更新 Clash 配置中的
url。 - 可以将
SECRET_TOKEN设置为 加密 变量,防止在面板中明文显示。 - 如果担心 base64 内容被截获,可再套一层简单的对称加密,但会增加复杂度,一般情况下 HTTPS + Token 已足够安全。
6.4 排错指南
- 返回
Unauthorized:检查 Clash 配置中的 token 参数名和值是否与 Worker 环境变量完全一致。 - 返回
Not Found:CONFIG_DB可能为空或变量名拼写错误。 - Clash 报
proxy provider parse error:确认 base64 编码前的 YAML 格式正确,且顶部有proxies:根键。 - 节点不显示:确认 Clash 配置中
use引用的 provider 名称一致,以及path目录有写入权限。 - 当
SECRET_TOKEN包含&、#、+、空格等字符时,直接拼在 URL 里会被浏览器或 Clash 错误解析,导致比对失败。
一个解决方法是对 Token 进行 URL 编码。但即使如此,有时候也不一定能访问成功。
更简单的建议是尽量避免在 Token 中使用特殊字符,只用大小写字母、数字和短横线-、下划线_。例如MyS3cret-Token_2026,这样无需编码,也足够安全。
自建 Proxy Provider 不仅能保护隐私,还能让你彻底掌控节点的分发与回收。借助 Cloudflare 全球边缘网络的低延迟特性,拉取速度也非常理想。希望这篇教程能帮你搭建一个安全、稳定的私有订阅服务。如果有任何疑问,欢迎在评论区交流。
喜欢的话,留下你的评论吧~