利用 Cloudflare Workers 反代并加速 Hugging Face Spaces (支持自定义域名)

在国内访问 Hugging Face Spaces 速度较慢,且免费账户无法绑定自定义域名。本文记录了如何利用 Cloudflare Workers 反向代理,配合 Cloudflare for SaaS 功能,实现自定义域名访问及线路优化(优选 IP)。

前置准备

  1. Hugging Face 项目:已部署好的 Space(建议 Docker 或静态应用)。
  2. Cloudflare 账号:拥有一个托管在 CF 的域名(作为回退源,例如 delln.us.ci)。
  3. 国内 DNS 账号:拥有一个想绑定的对外域名(例如阿里云/腾讯云托管的 zznuo.com)。

第一步:获取 Hugging Face 直链

  1. 进入你的 HF Space 页面。
  2. 点击右上角 ... -> Embed this space
  3. 复制 Direct URL
    • 格式通常为:https://用户名-项目名.hf.space
    • 注意:不要直接用浏览器地址栏的地址,那个带导航栏。

第二步:部署 Cloudflare Workers

  1. 在 Cloudflare 后台 -> Workers & Pages -> Create Application
  2. 创建一个新的 Worker,粘贴以下代码:

第三步:配置回退源 (Fallback Origin) —— 关键步骤

为了使用 SaaS 功能(CNAME 接入),我们需要配置一个“回退源域名”。假设使用 pan.delln.us.ci

1. 添加虚拟 DNS 记录:

  • 进入 delln.us.ci 的 DNS 设置。
  • 添加 A 记录:
    • Name: pan
    • IPv4: 192.0.2.1 (这是个保留 IP,俗称黑洞 IP,用于占位)
    • Proxy Status: 必须开启 Proxied (橙色云朵)。

2. 设置 Worker 路由 (Triggers):

  • 进入刚才创建的 Worker -> Settings -> Triggers
  • 点击 Add Route (不要用 Custom Domains)。
  • Route1: pan.delln.us.ci/* (注意末尾的 /*)。
  • Route2: *.zznuo.com/* (注意末尾的 /*)。
  • Zone: 选择 delln.us.ci

原理:当请求到达 pan 子域名时,Worker 会拦截请求,因此流量不会真的去连 192.0.2.1

第四步:开启 Cloudflare for SaaS

进入 delln.us.ciSSL/TLS -> Custom Hostnames (自定义主机名)。

1. 设置回退源:

  • Fallback Origin: 输入 pan.delln.us.ci
  • 等待状态变为 Effective (有效)。

2. 添加自定义域名:

  • 点击 Add Custom Hostname
  • 输入你想对外的域名:fp.zznuo.com
  • 按照提示,去阿里云/腾讯云添加 TXT 记录完成所有权验证。

第五步:国内 DNS 解析 (完成)

最后,去你的域名注册商(如阿里云 DNS):

  • 记录类型:CNAME
  • 主机记录:fp
  • 记录值:pan.delln.us.ci

进阶加速 (优选 IP): 如果你想优化国内访问速度,可以等将上面的 CNAME 记录改为  Cloudflare 优选 域名。

此处注意: 必须等自定义主机完成主机验证和证书验证后,才能将 CNAME 记录改为  Cloudflare 优选 域名,原因如下:

第六步:部署 Cloudflare Workers——应对Clouflare不定时主机验证和证书续期

  1. 在 Cloudflare 后台 -> Workers & Pages -> Create Application
  2. 创建一个新的 Worker,粘贴以下代码:

验证

访问 https://fp.zznuo.com。 如果看到 Hugging Face 的界面,说明配置成功!

注意:如果 Hugging Face Space 处于休眠状态 (Sleep),初次访问可能需要等待几十秒用于容器冷启动,也可自行配置保活:

第七步:部署 Cloudflare Workers——Hugging Face保活

  1. 在 Cloudflare 后台 -> Workers & Pages -> Create Application
  2. 创建一个新的 Worker,粘贴以下代码:

点击 Deploy 部署并设置定时触发。

结束:至此,整个教程结束。