ClaudeClaude 自建中转Claude 中转站搭建Claude Code 中转Cloudflare WorkerVPS 反代

Claude 中转站自建教程 - 用 Cloudflare Worker 一台 VPS 搞定

Claude 中转站搭建步骤详解。本文给出 Cloudflare Worker、VPS Nginx 反代、One-API 三套自建方案,附完整可用代码,帮你用官方 Key 自建一个"满血、可控、不卖给别人"的 Claude 中转。

· 阅读约 23 分钟

如果你已经有 Anthropic 官方 API Key,却卡在”国内访问 api.anthropic.com 不稳”这一步,自建中转是远比买第三方中转更好的选择

自建的核心差别:

对比项第三方中转自建中转
API Key 归属商家的(你看不到)你自己的官方 Key
ToS 合规性普遍违反 Anthropic ToS自用不涉及转售,风险最低
满血程度取决于商家良心100% 官方,无人能动
数据隐私经过第三方服务器只经过你自己的服务器
跑路风险商家可能跑路你自己不会跑
成本包年包月或按量CF Worker 免费额度 / VPS 月租
工程门槛注册即用需要懂一点点反代 / DNS

前提条件很关键:你需要有官方 Anthropic API Key。如果你完全没有海外手机号 / 信用卡 / 支付方式,先解决这一步——可以参考 Claude API 完整指南Claude 国内访问指南

风险提示:本文方案假设你只为自己(或小范围团队)使用自己拥有的 Anthropic Key。对外开放、二次售卖、共享给陌生人,都可能违反 Anthropic ToS

适合人群速判

你是…适不适合自建
个人开发者,有官方 Key,国内访问困难非常适合
小团队(3-10 人)共用一个 Key适合,可加访问控制
企业生产环境优先 AWS Bedrock / Vertex AI
完全没有官方 Key不适合,先解决 Key 来源
想拿来卖给别人赚钱不要做,违反 ToS

方案 A:Cloudflare Worker(推荐)

这是首选方案:零运维、免费额度对个人完全够用、Cloudflare 边缘节点全球覆盖、HTTPS 自动配置、防 DDoS 自带。

工作原理

你的应用 (Claude Code / SDK)
        |
        v
your-relay.your-domain.com  ← CF Worker 入口
        |
   Cloudflare 边缘节点
        |
        v
   api.anthropic.com  ← Anthropic 官方
        |
        v
   返回响应(透传 streaming)

CF Worker 做的事情非常简单:

  1. 接收来自你应用的请求
  2. 校验自定义鉴权 token(防止你的 Worker 被陌生人白嫖)
  3. 把请求原样转发给 api.anthropic.com
  4. 把 Anthropic 的响应原样返回(包括流式 SSE)

完整 worker.js 代码

下面这段代码直接可用,处理了流式响应、鉴权、错误透传:

const TARGET_HOST = "api.anthropic.com";

export default {
  async fetch(request, env, ctx) {
    // 处理 CORS 预检
    if (request.method === "OPTIONS") {
      return new Response(null, {
        status: 204,
        headers: {
          "Access-Control-Allow-Origin": "*",
          "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
          "Access-Control-Allow-Headers": "*",
          "Access-Control-Max-Age": "86400",
        },
      });
    }

    // 自定义鉴权:客户端必须带 x-relay-token
    const relayToken = request.headers.get("x-relay-token");
    if (!env.RELAY_TOKEN || relayToken !== env.RELAY_TOKEN) {
      return new Response(
        JSON.stringify({ error: "forbidden: invalid relay token" }),
        {
          status: 403,
          headers: { "content-type": "application/json" },
        }
      );
    }

    // 构造转发请求
    const url = new URL(request.url);
    url.host = TARGET_HOST;
    url.protocol = "https:";
    url.port = "";

    // 复制 headers 并注入官方 Key
    const newHeaders = new Headers(request.headers);
    newHeaders.set("host", TARGET_HOST);
    newHeaders.set("x-api-key", env.ANTHROPIC_API_KEY);
    newHeaders.delete("x-relay-token");
    newHeaders.delete("cf-connecting-ip");
    newHeaders.delete("cf-ray");

    // 如果客户端没带 anthropic-version,给一个默认
    if (!newHeaders.has("anthropic-version")) {
      newHeaders.set("anthropic-version", "2023-06-01");
    }

    // 发起转发
    const upstreamResponse = await fetch(url.toString(), {
      method: request.method,
      headers: newHeaders,
      body: request.body,
      // 关键:不能 buffer 流式响应
      redirect: "follow",
    });

    // 透传响应(包括 streaming SSE)
    const responseHeaders = new Headers(upstreamResponse.headers);
    responseHeaders.set("Access-Control-Allow-Origin", "*");

    return new Response(upstreamResponse.body, {
      status: upstreamResponse.status,
      statusText: upstreamResponse.statusText,
      headers: responseHeaders,
    });
  },
};

注意几个关键点:

  1. 不要 buffer 响应体:直接把 upstreamResponse.body 作为新 Response 的 body 传递,CF Worker 会自动透传流式数据
  2. 删除 Cloudflare 自动添加的 headercf-connecting-ipcf-ray 不该传给 Anthropic
  3. 保留 anthropic-version:这是 Anthropic API 必需头,不能丢
  4. x-relay-token 不要透传:你的自定义鉴权头,转发前要删除

部署步骤

  1. 注册 Cloudflare 账号,登录 dashboard
  2. 左侧菜单进入 Workers & Pages
  3. 点击 Create ApplicationCreate Worker
  4. 命名你的 Worker,比如 claude-relay
  5. 创建后点击 Edit code,把上面 worker.js 全部内容粘贴进去
  6. 点击 Deploy 部署
  7. 回到 Worker 主页 → SettingsVariables and Secrets
  8. 添加两个 Secret 变量:
    • ANTHROPIC_API_KEY:你的官方 Anthropic Key(sk-ant-...
    • RELAY_TOKEN:你自定义的访问 token(用于客户端鉴权,比如 32 位随机串)

部署后,你会得到一个 https://claude-relay.YOUR_SUBDOMAIN.workers.dev 地址。

客户端怎么用

请求时把 Authorization / x-api-key 换成 x-relay-token,base URL 改成你的 Worker 地址:

curl https://claude-relay.YOUR_SUBDOMAIN.workers.dev/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-relay-token: YOUR_RELAY_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-opus-4-5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Hi"}]
  }'

注意:这里上游的 x-api-key 是 Worker 内部自动注入的,客户端不需要也不应该带官方 Key

自定义域名(强烈建议)

*.workers.dev 在国内部分线路被污染或速度差,绑定自己的域名能显著提升可用性。

  1. 把域名解析(A/CNAME)托管到 Cloudflare
  2. Worker → SettingsTriggersCustom DomainsAdd Custom Domain
  3. relay.your-domain.com
  4. Cloudflare 自动签发 SSL 证书

之后客户端用 https://relay.your-domain.com 即可。

Streaming(SSE)保持透传

Anthropic API 的流式响应是 SSE 协议,关键是响应体不能被 Worker 缓冲。上面代码用 new Response(upstreamResponse.body, ...) 直接传递 ReadableStream,已经做对了。

容易踩坑的写法(错误示例,不要这么写):

// 错误:会把流读完再返回,破坏 streaming
const text = await upstreamResponse.text();
return new Response(text, { ... });

配额与限制

Cloudflare Workers 免费版:

免费额度备注
请求数100,000 / 天个人足够
CPU 时间10ms / 请求反代请求几乎无 CPU
出口流量无限但有公平使用条款
子请求50 / 请求反代单请求只占 1

重度用户超过 10 万次/天,升级 Workers Paid($5/月起),20 倍配额。

方案 B:VPS + Nginx 反代

适合:你有海外 VPS,想要更多控制(日志、限流、多 Key 轮询、审计),或者不信任 Cloudflare。

Nginx 配置

/etc/nginx/conf.d/claude-relay.conf 完整可用版本:

# 全局:限流 zone
limit_req_zone $binary_remote_addr zone=claude_relay:10m rate=10r/s;

# 上游
upstream anthropic_api {
    server api.anthropic.com:443;
    keepalive 32;
}

server {
    listen 443 ssl http2;
    server_name relay.example.com;

    # SSL(Let's Encrypt)
    ssl_certificate     /etc/letsencrypt/live/relay.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/relay.example.com/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    # 防 HTTP 直连
    if ($scheme = http) {
        return 301 https://$host$request_uri;
    }

    location / {
        # 鉴权(简单版)
        if ($http_x_relay_token != "YOUR_RELAY_TOKEN_HERE") {
            return 403;
        }

        # 限流
        limit_req zone=claude_relay burst=20 nodelay;

        # 注入官方 Key(这里直接写,生产建议用 njs / Lua 取 env)
        proxy_set_header x-api-key "sk-ant-YOUR_OFFICIAL_KEY";
        proxy_set_header anthropic-version "2023-06-01";
        proxy_set_header Host api.anthropic.com;

        # 删除客户端的中转 token,避免泄漏
        proxy_set_header x-relay-token "";

        # 反代核心
        proxy_pass https://anthropic_api;
        proxy_ssl_server_name on;
        proxy_ssl_name api.anthropic.com;

        # 关键:流式响应不能 buffer
        proxy_buffering off;
        proxy_cache off;
        proxy_http_version 1.1;
        proxy_set_header Connection "";

        # 超时设置(Claude 长输出可能 5 分钟+)
        proxy_connect_timeout 30s;
        proxy_send_timeout    600s;
        proxy_read_timeout    600s;

        # 客户端断连不取消上游
        proxy_ignore_client_abort off;
    }
}

# HTTP 跳转 HTTPS
server {
    listen 80;
    server_name relay.example.com;
    return 301 https://$host$request_uri;
}

部署步骤:

# 1. 安装 Nginx + Certbot
sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx

# 2. 申请 Let's Encrypt 证书
sudo certbot --nginx -d relay.example.com

# 3. 拷贝上面的配置到 /etc/nginx/conf.d/claude-relay.conf
# 4. 测试配置
sudo nginx -t

# 5. 重载
sudo systemctl reload nginx

关键参数解释

参数作用
proxy_buffering off关闭缓冲,让 SSE 实时透传
proxy_read_timeout 600sClaude 长输出可能 5+ 分钟,不要太短
proxy_http_version 1.1启用持久连接,配合 keepalive
limit_req_zone每 IP 限流,防止被刷
proxy_ssl_server_name on启用 SNI,否则 Anthropic 拒接

多 Key 轮询(进阶)

如果你有多个 Anthropic Key 想做负载均衡,可以用 Nginx + Lua(OpenResty)或者用 Node.js / Go 写一个简单的中间层。最简思路:

# 用 Nginx split_clients 做粗粒度轮询
split_clients "${remote_addr}${request_id}" $api_key {
    33.3%  "sk-ant-key1...";
    33.3%  "sk-ant-key2...";
    *      "sk-ant-key3...";
}

# 在 location 中使用
proxy_set_header x-api-key $api_key;

注意:多 Key 轮询本身不是问题,但如果你把 Key 共享给非授权用户使用,会违反 Anthropic ToS。建议只用于自己或团队成员。

IP 白名单(如果只是自己用)

更安全的做法是限制 IP:

location / {
    allow 1.2.3.4;        # 你的家庭 IP
    allow 10.0.0.0/8;     # 你的内网
    deny all;
    # ... 其它配置
}

方案 C:自建 OpenAI 兼容层

适合:你想把 Claude 暴露成 OpenAI 协议,给 Cursor、ChatBox、Continue、各种 OpenAI 客户端用。

常见开源项目

项目特点
one-api老牌开源、多模型聚合、UI 管理
new-apione-api 分支、更活跃、支持 Claude 原生协议
simple-one-api轻量版
openai-claude-proxy专注 OpenAI → Anthropic 协议转换

这类项目本质上做了两件事:

  1. 监听 OpenAI 风格的 /v1/chat/completions 端点
  2. 把 OpenAI 请求转成 Anthropic 的 /v1/messages 格式发出去,再把响应转回 OpenAI 格式

最小 Docker 部署示例(以 new-api 为例)

version: "3"

services:
  new-api:
    image: calciumion/new-api:latest
    container_name: new-api
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - TZ=Asia/Shanghai
      - SQL_DSN=root:password@tcp(mysql:3306)/new-api
      - REDIS_CONN_STRING=redis://redis:6379
    volumes:
      - ./data:/data
    depends_on:
      - mysql
      - redis

  mysql:
    image: mysql:8.0
    container_name: new-api-mysql
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=new-api
    volumes:
      - ./mysql:/var/lib/mysql

  redis:
    image: redis:7
    container_name: new-api-redis
    restart: unless-stopped

部署后:

  1. 浏览器访问 http://YOUR_VPS:3000,初始管理员账号注册
  2. 后台添加渠道:选 Anthropic,填官方 Key
  3. 生成对外的 OpenAI 兼容 Token
  4. 客户端把 OpenAI base URL 改成 http://YOUR_VPS:3000/v1,模型选 claude-opus-4-5 之类

重要风险

自建 OpenAI 兼容层、暴露给非自己使用的人,是典型的 Anthropic ToS 违规场景——本质上你成了一个小型中转商。这一段写出来不是鼓励你做,而是让你知道:

  • 自用(自己 + 自己的客户端):合规风险低
  • 小团队内部共享:灰色
  • 对外售卖 / 公开注册:明确违反 ToS

请清楚自己在做什么。

Claude Code 接入自建中转

Claude Code 通过 ANTHROPIC_BASE_URL 环境变量切换后端,自建好后接入很简单。详细背景见 Claude Code 代理配置指南

Cloudflare Worker 方案

由于 CF Worker 用的是自定义 x-relay-token,而 Claude Code 内部用 x-api-key,最简单的做法是:让你的 Worker 同时接受 x-api-key(把 x-api-key 当作 relay token 校验):

// 改写鉴权部分
const clientKey = request.headers.get("x-api-key") || request.headers.get("authorization")?.replace("Bearer ", "");
if (!env.RELAY_TOKEN || clientKey !== env.RELAY_TOKEN) {
  return new Response("forbidden", { status: 403 });
}

// 然后用官方 Key 覆盖
newHeaders.set("x-api-key", env.ANTHROPIC_API_KEY);

这样 Claude Code 端配置:

# Linux / macOS
export ANTHROPIC_BASE_URL="https://relay.your-domain.com"
export ANTHROPIC_API_KEY="YOUR_RELAY_TOKEN"  # 注意:这里是 relay token,不是官方 key
claude
# Windows PowerShell
$env:ANTHROPIC_BASE_URL = "https://relay.your-domain.com"
$env:ANTHROPIC_API_KEY = "YOUR_RELAY_TOKEN"
claude

或者写进 ~/.claude/settings.json

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://relay.your-domain.com",
    "ANTHROPIC_API_KEY": "YOUR_RELAY_TOKEN"
  }
}

Claude Code 在国内的安装与运行问题,可以参考 Claude Code 国内安装教程

自建避坑清单

整理几个真实会踩的坑:

1. 流式响应被 buffer

症状:Claude Code / SDK 收不到 streaming,要等响应全部完成后一次性收到。

原因:

  • Nginx 没设 proxy_buffering off
  • 中间有 CDN(除 CF)做了 buffer
  • Worker 代码用 .text() / .json() 读完了再返回

解决:上面给的代码都已经处理,复制时不要改。

2. 超时太短

Claude 长输出(特别是 Opus + Extended Thinking)可能 5-10 分钟。Nginx 默认 60s proxy_read_timeout 会直接掐断。

解决:proxy_read_timeout 600s 起步。Cloudflare Worker 单请求最长 30s(Free)/ CPU 时间限制,长 streaming 是受 Worker 整体规则限制的,重度用户用 VPS 方案更稳。

3. SNI 问题

Nginx 反代 HTTPS 上游时,如果不设 proxy_ssl_server_name on,会因为 SNI 缺失被 Anthropic 拒接(TLS 握手阶段)。

4. anthropic-version 丢失

不带这个 header,Anthropic 返回 400。给客户端没带的情况留个默认值。

5. CF Worker 502 / 1101

CF Worker 异常通常因为代码抛了未捕获异常。开发期间在 dashboard 看实时 logs,加 try-catch 包裹整段逻辑。

6. 断线重连

客户端如果在 streaming 中途断开,上游可能继续消耗 Token。可以考虑在 Worker 里用 request.signal 监听断连并 abort 上游 fetch:

const upstreamResponse = await fetch(url.toString(), {
  method: request.method,
  headers: newHeaders,
  body: request.body,
  signal: request.signal,  // 客户端断连自动 abort 上游
});

7. CDN 节点污染

CF 的某些 IP 段在国内被污染。如果你的自定义域名也是 CF 代理(橙云),可以:

  • 试试不同的 IP 段
  • 用 [iP查询工具] 找延迟低的优选 IP
  • 或者只 DNS 不代理(灰云)+ 自建一层

流量监控建议

自建好后,建议加个基本的监控:

监控项工具 / 方式
调用次数 / 每日CF Worker dashboard 自带、Nginx access log
Token 消耗拦截响应解析 usage 字段
错误率监控 4xx/5xx 占比
延迟分布P50/P95/P99
上游异常Anthropic 限流 / 故障告警

为什么这个重要:自建意味着 Key 直接挂你账户上,如果你的 relay token 泄漏被滥用,账单会很难看。监控异常用量是防止账单爆炸的最后一道防线。

可选做法:

  • CF Worker 用 Workers Analytics + Logpush 到 R2
  • Nginx 用 nginx-prometheus-exporter + Grafana
  • 简单点直接 tail -f /var/log/nginx/access.log

FAQ

Q:自建中转算违反 Anthropic ToS 吗? 自用、不转售、不共享给陌生人,本质上等同于”你给自己设了个网络代理”,ToS 风险很低。但如果你把它当成业务对外卖、对公众开放注册,那就是典型的 ToS 违规。

Q:Cloudflare Worker 免费额度够用吗? 对个人开发者基本够。10 万次/天的请求量意味着每秒约 1.2 次,正常编码使用远到不了这个量。重度调用考虑升级 Paid 或换 VPS 方案。

Q:CF Worker 在国内访问稳定吗? 近年部分地区线路有波动,建议绑定自定义域名 + 准备好备用 VPS 方案。重要场景不要把鸡蛋放一个篮子。

Q:VPS 选哪里? 日本东京、新加坡、香港线路通常对国内最友好。AWS、GCP、Vultr、Linode、DigitalOcean 都有这些区域机房,选延迟低的即可。

Q:能不能在国内 VPS 上搭中转? 技术上能搭,但国内 VPS 出网到 api.anthropic.com 依然受限。必须再叠一层境外出口(自己再租海外 VPS 转发,或用 IP 代理服务),意义不大。

Q:自建中转需要懂多少技术? CF Worker 方案:会复制粘贴 + 注册 CF 账号即可。VPS Nginx 方案:要熟悉 Linux、Nginx、SSL 证书。new-api 方案:要懂一点 Docker。

Q:自建后还能给团队成员用吗? 小团队内部使用,技术上完全可以——加一个用户级 token 管理就行。但要注意:Anthropic ToS 中关于”Key 共享”的边界很模糊,团队内部不对外的使用,通常风险较低;规模一大或对外,就明确违规了。

Q:我没有官方 API Key 怎么办? 没办法自建,因为自建就是给你自己的 Key 做代理。先解决官方账号问题——海外信用卡、海外手机号是核心门槛。或者考虑 Anthropic Pro/Max 订阅(仅 Web/桌面端,无法用于自建)。