Featured image of post 服务器部署Sub2API,共享富哥的Claude Code订阅

服务器部署Sub2API,共享富哥的Claude Code订阅

不是想白嫖,是真买不起,一直白嫖一直爽

本文完整记录了在阿里云 CentOS 8 服务器上,从配置科学上网到部署 Sub2API、再到用户通过 OpenClaw / Claude Code 使用的全流程,包括踩坑记录与解决方案。(服务器尽量用 Ubuntu 或者 Debian)。关于 mihomo 也可以用到 NAS 影视刮削,具体配置需要调整,⚠️别让 PT 把订阅额度消耗完,当然这个 Sub2API 也可以安装到 NAS 上。。。

前言

Claude Pro/Team 订阅价格不低,如果团队里多人都需要使用,每人一个订阅成本很高。Sub2API 可以将 Claude 订阅账号转化为兼容 Anthropic API 的服务,让多个用户通过 API Key 共享使用,大幅降低成本。(封号玄学问题此文不讨论)

整体架构如下:

1
2
3
4
5
用户(OpenClaw / Claude Code)
       ↓ API 请求
  Sub2API(API 网关)
       ↓ 转发
Claude 上游账号(Pro 订阅)

本文将按以下顺序展开:

  1. 服务器科学上网 — Sub2API 需要访问 Claude,服务器必须能正确访问
  2. 部署 Sub2API — 搭建 API 网关服务
  3. 配置 Nginx 反向代理 — HTTPS 访问 + 修复常见 403 问题
  4. 用户使用指南 — Claude Code 和 OpenClaw 如何连接

服务器配置访问Claude

Sub2API 部署在国内服务器上,需要访问 Claude API,因此服务器本身必须能正常访问 Claude。这里使用 mihomo(原 Clash.Meta),它原生支持订阅链接,配置简单。

安装 mihomo

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 查看系统架构
uname -m

# 下载 mihomo(以 amd64 为例)
# 最新版本:https://github.com/MetaCubeXd/mihomo/releases
curl -Lo /tmp/mihomo.gz https://github.com/MetaCubeXd/mihomo/releases/download/v1.19.0/mihomo-linux-amd64-v1.19.0.gz
gunzip /tmp/mihomo.gz
mv /tmp/mihomo /usr/local/bin/mihomo
chmod +x /usr/local/bin/mihomo

# 创建配置目录
mkdir -p /etc/mihomo

为什么选 mihomo 而不是 sing-box? sing-box 官方安装脚本仅支持 Debian/Ubuntu,且原生不支持订阅链接,需要额外的转换工具。mihomo 通过proxy-providers直接填入订阅链接即可,更省事。

推荐个管理订阅的开源项目: https://github.com/7Sageer/sublink-worker

1.2 编写配置文件

创建/etc/mihomo/config.yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
mixed-port: 7890
allow-lan: true
mode: rule
log-level: info
geodata-mode: false
geo-auto-update: false
external-controller: 127.0.0.1:9090

proxy-providers:
 airport:
   type: http
   url: "替换为你的订阅链接"
   interval: 3600
   path: ./proxies.yaml
   filter: "(?i)新加坡|singapore|sg"
   health-check:
     enable: true
     url: http://www.gstatic.com/generate_204
     interval: 300

proxy-groups:
 - name: "节点选择"
   type: select
   use:
     - airport
rules:
 - DOMAIN-SUFFIX,cn,DIRECT
 - DOMAIN-KEYWORD,baidu,DIRECT
 - DOMAIN-KEYWORD,alibaba,DIRECT
 - DOMAIN-KEYWORD,tencent,DIRECT
 - DOMAIN-SUFFIX,qq.com,DIRECT
 - DOMAIN-SUFFIX,taobao.com,DIRECT
 - DOMAIN-SUFFIX,jd.com,DIRECT
 - DOMAIN-SUFFIX,163.com,DIRECT
 - DOMAIN-SUFFIX,weixin.qq.com,DIRECT
 - IP-CIDR,10.0.0.0/8,DIRECT
 - IP-CIDR,172.16.0.0/12,DIRECT
 - IP-CIDR,192.168.0.0/16,DIRECT
 - MATCH,节点选择
配置项 说明
mixed-port: 7890 同时提供 HTTP + SOCKS5 代理
allow-lan: true 允许局域网设备连接(Docker 容器需要)
external-controller 启用 API,方便查看和切换节点
geodata-mode: false 不使用 GeoIP 数据库,避免从 GitHub 下载失败

踩坑记录: 如果配置中使用了GEOIP规则,mihomo 会尝试从 GitHub 下载 GeoIP 数据库,但在国内服务器上经常因为connection reset by peer导致启动失败。解决办法是用域名规则替代 GeoIP 规则。

1.3 设置 systemd 服务

创建/etc/systemd/system/mihomo.service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[Unit]
Description=mihomo Daemon
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

启动服务:

1
2
3
systemctl daemon-reload
systemctl enable --now mihomo
systemctl status mihomo

1.4 测试

测试是否可以通过 mihomo 访问 Google

1
export https_proxy=http://127.0.0.1:7890 && export http_proxy=http://127.0.0.1:7890 && curl -I https://www.google.com

1.5 配置 Docker 代理

Docker 守护进程不读取系统环境变量,需要单独配置。Sub2API 用 Docker 部署时,拉取镜像需要走代理:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
mkdir -p /etc/systemd/system/docker.service.d

cat > /etc/systemd/system/docker.service.d/proxy.conf << 'EOF'
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,*.cn,*.aliyuncs.com"
EOF

systemctl daemon-reload
systemctl restart docker

确认代理已生效:

1
systemctl show --property=Environment docker

如果后续不想让 docker 走代理,删掉配置即可

1
2
3
rm /etc/systemd/system/docker.service.d/proxy.conf
systemctl daemon-reload
systemctl restart docker

1.6 节点管理

如果你在 1.4 步骤运行了测试,重新开一个新的 SSH 窗口,否则你下面的访问会走代理。

1
2
3
4
5
# 查看所有可用节点
curl -s http://127.0.0.1:9090/proxies/节点选择 | python3 -m json.tool

# 手动切换到指定节点(如新加坡节点)
curl -X PUT http://127.0.0.1:9090/proxies/节点选择 -d '{"name":"新加坡01"}'

加了个过滤走新加坡,防止走香港或者地址乱跳 ,在proxy-providers中添加filter

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
proxy-providers:
 airport:
   type: http
   url: "你的订阅链接"
   interval: 3600
   path: ./proxies.yaml
   filter: "(?i)新加坡|singapore|sg"
   health-check:
     enable: true
     url: http://www.gstatic.com/generate_204
     interval: 300

proxy-groups:
 - name: "节点选择"
   type: url-test
   use:
     - airport
   interval: 300
   tolerance: 50

1.7 查看日志

1
2
3
4
5
6
7
8
# 实时跟踪日志
journalctl -u mihomo -f

# 通过 API 查看实时连接
curl -s http://127.0.0.1:9090/connections | python3 -m json.tool

# 实时流量日志(持续输出)
curl -s http://127.0.0.1:9090/logs

如果想提高日志详细程度,修改配置文件里的log-level:改完重启 mihomosystemctl restart mihomo

1
2
3
4
log-level: debug    # 最详细
# log-level: info   # 一般信息
# log-level: warning # 仅警告
# log-level: error   # 仅错误

二、部署 Sub2API

2.1 什么是 Sub2API

Sub2API是一个将 Claude 订阅账号转化为 Anthropic API 兼容接口的工具。它支持:

  • 多上游 Claude 账号负载均衡

  • 用户管理和 API Key 分发

  • 余额和配额控制

  • 兼容 Anthropic Messages API

2.2 Docker Compose 部署

参考 Sub2API 官方仓库,使用 Docker Compose 部署:

1
2
3
4
5
# 拉取镜像(确保 Docker 已配置代理)
docker compose pull

# 启动服务
docker compose up -d

Sub2API 默认监听在127.0.0.1:8081(具体端口以你的配置为准)。

2.3 后台配置

部署完成后,进入 Sub2API 管理面板:

  1. 在 IP 管理添加代理,协议选 SOCKS5 即可,地址用阿里云内网 IP,防止 docker 内无法访问127.0.0.1:7890端口
  2. 添加上游账号 — 添加你的 Claude Pro/Team 订阅账号的 OAuth Token
  3. 创建用户 — 为每个使用者创建账户
  4. 分发 API Key — 为用户生成sk-xxx格式的 API Key
  5. 设置余额 — 给用户充值余额(默认余额为 0,不充值会报INSUFFICIENT_BALANCE

三、配置 Nginx 反向代理

Sub2API 需要通过 HTTPS 对外提供服务,使用 Nginx 做反向代理。

3.1 Nginx 配置

这是完整的、经过调优的配置:

首先,在/etc/nginx/nginx.confhttp块中添加:

1
2
3
4
http {
   underscores_in_headers on;   # 关键!允许下划线 Header
   # ... 其他已有配置 ...
}

然后配置 server 块(如/etc/nginx/conf.d/subai.conf):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
server {
   listen 443 ssl http2;
   server_name subai.your-domain.com;

   ssl_certificate /etc/nginx/cert/your-domain.pem;
   ssl_certificate_key /etc/nginx/cert/your-domain.key;
   ssl_session_timeout 5m;
   ssl_protocols TLSv1.2 TLSv1.3;
   ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
   ssl_prefer_server_ciphers on;

   access_log /var/log/nginx/subai.access.log;
   error_log /var/log/nginx/subai.error.log;

   location / {
       proxy_pass http://127.0.0.1:8081;
       proxy_http_version 1.1;

       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;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";

       # 流式响应必需
       proxy_buffering off;
       proxy_cache off;

       # 防止长请求超时
       proxy_read_timeout 300s;
       proxy_send_timeout 300s;
   }
}

3.2 关键配置说明

配置项 为什么需要
underscores_in_headers on Nginx 默认丢弃含下划线的 Header(如session_id),Sub2API 的多账号路由依赖此 Header, 不加这条是导致 403 最常见的原因
proxy_buffering off Claude 的流式响应需要关闭缓冲,否则用户体验会变成"等很久一次性输出"
proxy_read_timeout 300s Claude 长对话的响应时间可能很长,默认 60s 容易超时
Upgrade+Connection 支持 WebSocket/SSE 流式传输
TLSv1.2 TLSv1.3 TLSv1 和 TLSv1.1 已废弃,只保留安全版本

3.3 应用配置

1
2
3
4
5
# 测试配置语法
sudo nginx -t

# 重载配置
sudo nginx -s reload

3.4 验证部署

1
2
3
4
5
curl -X POST https://subai.your-domain.com/v1/messages \
 -H "Content-Type: application/json" \
 -H "x-api-key: sk-你的key" \
 -H "anthropic-version: 2023-06-01" \
 -d '{"model":"claude-sonnet-4-20250514","max_tokens":100,"messages":[{"role":"user","content":"hi"}]}'

如果返回正常的 Claude 响应,说明部署成功。

四、常见错误排查

403 Forbidden

排查顺序:

  1. Nginx 丢失下划线 Header — 检查是否添加了underscores_in_headers on
  2. API Key 错误 — 确认使用的是 Sub2API 生成的 Key,而非 Anthropic 官方 Key
  3. 上游账号问题 — OAuth Token 过期、订阅到期或被BAN 排查方法:
1
2
3
4
5
# 查看 Sub2API 日志
docker compose logs -f sub2api

# 查看 Nginx 日志
tail -f /var/log/nginx/subai.error.log

如果 curl 直接请求127.0.0.1:8081正常,但通过域名 403,说明是 Nginx 配置问题。

INSUFFICIENT_BALANCE

请求已到达 Sub2API,但用户余额不足。进入管理后台给对应用户充值即可。

——————–## 五、用户使用指南 以下是用户端的配置方法,用户只需要拿到两样东西:

  • API 地址https://subai.your-domain.com

  • API Keysk-xxx(管理员分配)

5.1 Claude Code 使用

1
2
3
# 设置环境变量
export ANTHROPIC_BASE_URL="https://subai.your-domain.com"
export ANTHROPIC_API_KEY="sk-你的key"

写入 shell 配置文件使其持久化:

1
2
3
echo 'export ANTHROPIC_BASE_URL="https://subai.your-domain.com"' >> ~/.zshrc
echo 'export ANTHROPIC_API_KEY="sk-你的key"' >> ~/.zshrc
source ~/.zshrc

5.2 OpenClaw 使用

通过自定义Model provider 添加,API Base URL 写你 sub2api 域名

切换模型

在 OpenClaw 中切换到不同模型:

1
2
3
4
5
# 使用 Sonnet 模型
/model anthropic/claude-sonnet-4-6

# 使用 Opus 模型(注意 token 消耗约为 Sonnet 的 5-8 倍)
/model anthropic/claude-opus-4-6

如果使用配置文件方式,修改primary字段:

1
2
3
4
5
6
7
8
9
{
 "agents": {
   "defaults": {
     "model": {
       "primary": "sub2api/claude-opus-4-6-20250514"
     }
   }
 }
}

验证连接

1
2
3
4
5
# 查看可用模型
openclaw models list

# 测试连接
openclaw models status --probe

5.3 其他应用使用

任何支持自定义 API 端点的应用,只需填入:

  • API Base URLhttps://subai.your-domain.com

  • API Keysk-你的key

如果应用有代理配置界面,也可以直接填:

1
http://服务器IP:7890

或:

1
socks5://服务器IP:7890

——————–## 六、完整架构总结

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
┌──────────────────────────────────────────────────────┐
│                      用户端                           │
│  Claude Code / OpenClaw / 其他兼容 Anthropic API 的工具 │
│  配置: ANTHROPIC_BASE_URL + ANTHROPIC_API_KEY         │
└──────────────────────┬───────────────────────────────┘
                      │ HTTPS
┌──────────────────────────────────────────────────────┐
│                 Nginx 反向代理                         │
│  - SSL 终止                                           │
│  - underscores_in_headers on                          │
│  - proxy_buffering off(流式响应)                      │
└──────────────────────┬───────────────────────────────┘
                      │ HTTP
┌──────────────────────────────────────────────────────┐
│                    Sub2API                            │
│  - 用户管理 & API Key 分发                             │
│  - 多上游账号负载均衡                                   │
│  - 余额 & 配额控制                                     │
└──────────────────────┬───────────────────────────────┘
                      │ 通过 mihomo 代理出海
┌──────────────────────────────────────────────────────┐
│              mihomo 本地代理 (:7890)                   │
│  - ✈️订阅链接自动拉取节点                              │
│  - 自动选择最低延迟节点                                  │
└──────────────────────┬───────────────────────────────┘
             Claude API (Anthropic)

——————–## 七、附录

mihomo 常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 启动/停止/重启
systemctl start mihomo
systemctl stop mihomo
systemctl restart mihomo

# 查看日志
journalctl -u mihomo -f

# 查看节点列表
curl -s http://127.0.0.1:9090/proxies/节点选择 | python3 -m json.tool

# 切换节点
curl -X PUT http://127.0.0.1:9090/proxies/节点选择 -d '{"name":"节点名称"}'

Sub2API 常用命令

1
2
3
4
5
6
7
8
# 查看日志
docker compose logs -f sub2api

# 重启服务
docker compose restart

# 更新版本
docker compose pull && docker compose up -d

卸载清理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 卸载 mihomo
systemctl stop mihomo && systemctl disable mihomo
rm -f /etc/systemd/system/mihomo.service /usr/local/bin/mihomo
rm -rf /etc/mihomo
rm -f /etc/profile.d/proxy.sh

# 卸载 Sub2API
cd /path/to/sub2api && docker compose down

# 清理 Docker 代理
rm -f /etc/systemd/system/docker.service.d/proxy.conf
systemctl daemon-reload && systemctl restart docker

📎 参考文章