部署文档

从零开始部署属于你自己的加速代理服务,全程免费

1

Fork 项目仓库

点击 GitHub 仓库右上角 Fork 按钮,将项目复制到你的账号下。

https://github.com/你的用户名/cloudflare-proxy
2

连接到 Cloudflare Pages

登录 Cloudflare Dashboard,进入 Workers & Pages → 创建应用程序 → Pages → 连接到 Git。

  • 选择你 Fork 的仓库
  • 构建命令:留空(纯静态站点)
  • 输出目录:/
  • 点击「保存并部署」
构建配置 Framework preset: None Build command: (leave empty) Output directory: / Root directory: (leave empty)
3

_worker.js 自动识别

项目根目录的 _worker.js 会在部署时自动被 Cloudflare Pages 识别为 Worker。它提供以下代理能力:

GitHub
Release 下载、Git Clone、Raw 文件、Archive 归档 — 通过 /https://github.com/... 路径代理
Docker Hub
Registry Mirror — 通过 /v2/... 路径代理到 registry-1.docker.io
Docker Auth
自动解析 401 WWW-Authenticate → 获取 Bearer Token → 重试请求;凭据优先级:客户端自带 Authorization → DOCKER_USER/DOCKER_PASS → 匿名
S3 反代
拦截 302/307 重定向到 AWS S3 的响应,通过 Worker 重新代理(解决中国大陆访问问题)
多 Registry
支持 GHCR、Quay.io、GCR、K8s Registry 等第三方容器镜像仓库
静态页面
非代理路径 → env.ASSETS.fetch() → 返回 Pages 托管的前端页面

完整代码见仓库根目录的 _worker.js,无需修改即可部署使用。

4

绑定自定义域名(可选)

进入 Pages 项目 → 自定义域 → 添加你的域名。配置 DNS CNAME 记录指向 your-project.pages.dev。

Type Name Target CNAME @ your-project.pages.dev
5

配置你的域名

编辑 public/assets/js/config.js,将 DOMAIN 改为你的实际域名。页面加载时会自动替换所有代码示例中的占位域名。

window.CF_PROXY = { DOMAIN: '你的域名', };

如果需要彻底清理所有文件中的占位文本,也可以使用 grep -rl 'cloudflare-proxy-6rw.pages.dev' . | xargs sed -i 's/cloudflare-proxy-6rw.pages.dev/你的域名/g'。

部署常见问题

Worker 代理是否会消耗大量请求额度?
每个代理请求会计入 Workers 请求数。免费计划每日 10 万次,个人使用绰绰有余。如果流量大,可开启 Cloudflare Cache 减少回源次数。
是否可以代理 GitHub LFS(大文件存储)?
Workers Free 计划单次请求响应体上限 100MB。对于超过 100MB 的 LFS 文件,建议配置 git LFS smudge filter 或使用其他方案。
能否配置 Basic Auth 只供自己使用?
可以。在 Worker 代码中添加 Basic Auth 校验逻辑,检查请求头中的 Authorization 字段。也可以使用 Cloudflare Access 的 Zero Trust 策略实现。
怎么配置 Docker Hub 账号?为什么拉取好像没用上我配置的账号?
  1. Pages 项目 → Settings → Variables and Secrets,在生产环境新增 DOCKER_USER(Docker Hub 用户名)和 DOCKER_PASS(密码或 Access Token,推荐 Token)。
  2. 重新部署一次。环境变量是部署时才注入的,只加变量不重新部署,线上版本照样读不到——这是「明明配了却像没配」最常见的原因。
  3. 想确认到底用了哪一档凭据:临时加一个 DEBUG_AUTH=1 并重新部署,然后执行 curl -sSI https://你的域名/v2/ | grep -i x-proxy-auth-source:返回 env 说明用上了你配置的账号,anonymous 说明这个部署没读到变量(回第 1、2 步),client 说明用的是客户端自带的凭据。排查完删掉该变量再部署一次。

凭据优先级:客户端自带 Authorization(Basic/Bearer)→ DOCKER_USER/DOCKER_PASS → 匿名。客户端凭据被上游拒绝时会自动回落到你配置的账号;诊断头只显示凭据档位,不包含任何凭据内容。

代理会被封禁吗?
Cloudflare Workers 使用共享 IP 池,一般不会被源站封禁。如果遇到 GitHub Rate Limit,可以在 Worker 中添加 GitHub Token 提升限额(5000 req/h)。