CLIProxyAPI(六):结合 new-api 打造多用户 API 网关
本文是 CLIProxyAPI 系列教程第六篇,聚焦于如何将 CLIProxyAPI 接入 new-api,打造支持多用户管理的企业级 API 网关。
系列目录
团队里有多个人想用 Claude,但订阅账号只有几个,怎么合理分配?最直接的办法是在 CLIProxyAPI 前面再架一层 new-api:它负责认证、计费、限流,CLIProxyAPI 负责 OAuth 轮询和模型路由,两者组合之后你就有了一套完整的多用户 AI API 网关。
应用场景
团队共享订阅:公司有 5 个 Claude Max 账号,10 个工程师要用。把账号都导入 CLIProxyAPI,再用 new-api 给每个工程师发一个独立令牌,设定各自的 Token 月度上限,互不干扰,管理员可以随时查用量。
个人多设备统一管理:自己有 Mac、Linux 服务器、手机(Termux)等多个环境,每个地方都配一遍 CLIProxyAPI 太麻烦。统一跑一套 new-api + CLIProxyAPI,其他设备填 new-api 的令牌即可。
用量审计:new-api 详细记录每个令牌、每次请求的 Token 消耗,方便核算成本或向团队成员收费。
整体架构
关键点:成员只接触 new-api 的令牌,永远看不到 CLIProxyAPI 的 api-key,也看不到上游 OAuth 凭证。
安装 new-api
方式 A:二进制直接运行(推荐,无需 Docker)
从 GitHub Releases 下载对应平台的二进制文件:
mkdir -p ~/new-api && cd ~/new-api
# 下载最新版(以 Linux amd64 为例)
wget https://github.com/Calcium-Ion/new-api/releases/latest/download/new-api-linux-amd64 -O new-api
chmod +x new-api
# 创建 systemd 服务文件
sudo tee /etc/systemd/system/new-api.service > /dev/null <<EOF
[Unit]
Description=New API Service
After=network.target
[Service]
User=$USER
WorkingDirectory=$HOME/new-api
ExecStart=$HOME/new-api/new-api --port 3000 --log-dir $HOME/new-api/logs
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now new-api
方式 B:Docker Compose
services:
new-api:
image: calciumion/new-api:latest
container_name: new-api
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
volumes:
- ./data:/data
- ./logs:/app/logs
environment:
- TZ=Asia/Shanghai
docker compose up -d
首次登录
浏览器打开 http://127.0.0.1:3000,用默认账号登录:
- 用户名:
root - 密码:
123456
立刻去「个人设置」修改用户名和密码,避免使用默认凭证。
在 new-api 中添加 CLIProxyAPI 渠道
进入 new-api 管理后台,点击左侧「渠道」→「添加渠道」。
| 字段 | 填写值 | 说明 |
|---|---|---|
| 类型 | OpenAI | new-api 用 OpenAI 兼容协议对接 |
| 名称 | CLIProxyAPI-主 | 便于区分,自定义 |
| 代理 | http://127.0.0.1:8317/v1 |
二进制部署填本地地址;Docker 同网络时用容器名 http://cliproxyapi:8317/v1 |
| 密钥 | CLIProxyAPI 配置的 api-key | 多个 key 换行分隔 |
| 模型 | 见下方 | 手动填写或导入 |
模型列表(按需勾选,与 CLIProxyAPI /v1/models 实际返回对齐):
claude-opus-4-8
claude-opus-4-7
claude-opus-4-6
claude-sonnet-4-6
claude-sonnet-4-5-20250929
claude-haiku-4-5-20251001
gemini-3.5-flash
gemini-3-flash
gemini-3.1-flash-lite
gemini-2.5-flash
gemini-2.5-flash-lite
模型映射(可选):如果你想给成员提供短别名,在「模型映射」里填(格式:来源名:实际模型):
claude-sonnet:claude-sonnet-4-6
claude-opus:claude-opus-4-8
claude-haiku:claude-haiku-4-5-20251001
gemini-flash:gemini-3.5-flash
填完后点「测试」,返回成功即可保存。
渠道健康检查
new-api 支持定时对渠道发测试请求,自动禁用不健康的渠道。在「渠道」列表页,找到刚添加的渠道,开启「自动禁用」开关,检测间隔建议设为 5 分钟。
在 new-api 中创建令牌
「令牌」是分发给团队成员的访问凭证,每个成员一个(或多个)。
进入「令牌」→「添加令牌」:
| 字段 | 建议配置 |
|---|---|
| 名称 | 工程师姓名或用途,如 alice-dev |
| 额度 | 按 Token 计,例如 500000(50 万 Token/月) |
| 过期时间 | 按需设置,团队内部可不过期 |
| 模型限制 | 可限制只能用特定模型,留空则继承渠道配置 |
| IP 限制 | 办公网段,可选 |
创建后复制生成的 sk- 开头令牌,发给对应成员。成员拿到令牌后这样用:
# 配置环境变量(以 Cursor / 命令行脚本为例)
export OPENAI_API_BASE="http://your-server:3000/v1"
export OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxx"
# 直接调用
curl http://your-server:3000/v1/chat/completions \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [{"role": "user", "content": "你好"}]
}'
使用量统计与限额配置
new-api 的「日志」页面记录每一次请求,字段包括:令牌名、模型、请求 Token、响应 Token、耗时、渠道。
查看某成员用量:在日志页面按令牌名过滤,导出 CSV 即可出账单。
设置全局限速:「设置 → 通用设置」里可以配置单用户 QPM(每分钟请求数)上限,防止个别成员占用过多资源。
余额预警:令牌剩余额度低于阈值时,new-api 会在管理后台标红,可结合 Webhook 通知到钉钉 / Slack。
# Webhook 通知示例(在 new-api 设置里填 Webhook URL)
# new-api 会 POST 以下格式的 JSON
{
"type": "quota_warning",
"token_name": "alice-dev",
"remaining_quota": 10000,
"timestamp": 1749135600
}
反向代理统一对外暴露
本地跑 new-api 只能内网访问,对外暴露需要一层反向代理并加 HTTPS。
Nginx 方案
server {
listen 443 ssl http2;
server_name api.example.com;
ssl_certificate /etc/ssl/api.example.com.crt;
ssl_certificate_key /etc/ssl/api.example.com.key;
# 安全头
add_header Strict-Transport-Security "max-age=31536000" always;
add_header X-Content-Type-Options nosniff always;
location / {
proxy_pass http://127.0.0.1:3000;
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;
# 流式响应(SSE)必须关闭缓冲
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 300s;
}
}
# HTTP 跳转 HTTPS
server {
listen 80;
server_name api.example.com;
return 301 https://$host$request_uri;
}
Caddy 方案(自动 HTTPS,更简洁)
api.example.com {
reverse_proxy 127.0.0.1:3000 {
flush_interval -1 # 关闭缓冲,保证流式输出正常
header_up X-Real-IP {remote_host}
}
}
Caddy 会自动申请并续期 Let's Encrypt 证书,无需额外配置。
实际使用效果验证
部署完成后,用一个测试令牌验证整条链路:
# 1. 普通请求
curl https://airouter.k330.com/v1/chat/completions \
-H "Authorization: Bearer <your-token>" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [{"role": "user", "content": "用一句话介绍你自己"}],
"max_tokens": 100
}'
# 2. 流式请求
curl https://airouter.k330.com/v1/chat/completions \
-H "Authorization: Bearer <your-token>" \
-H "Content-Type: application/json" \
--no-buffer \
-d '{
"model": "claude-opus-4-8",
"messages": [{"role": "user", "content": "数到10"}],
"stream": true
}'
正常情况下:
- 普通请求 → new-api 日志出现一条记录,Token 消耗正确
- 流式请求 → 逐字符输出,无长时间卡顿
- 超额令牌 → new-api 返回
429而非请求到 CLIProxyAPI
进阶:多个 CLIProxyAPI 实例作为渠道
当团队规模进一步扩大,或需要接入不同地区的订阅时,可以在 new-api 中添加多个渠道,每个渠道对应一套 CLIProxyAPI 实例。
场景示例
| 渠道名 | CLIProxyAPI 地址 | 账号池 | 适用场景 |
|---|---|---|---|
| CLIProxy-US | http://us-proxy:8317/v1 |
美区 Claude Max × 3 | 低延迟美区用户 |
| CLIProxy-HK | http://hk-proxy:8317/v1 |
港区账号 × 2 | 亚太用户 |
| CLIProxy-Gemini | http://gemini-proxy:8317/v1 |
Google One 账号 × 3 | Gemini 模型专用 |
new-api 渠道优先级与负载均衡
new-api 对同一模型有多个渠道时,支持以下策略(在渠道「权重」字段设置):
优先级模式:权重高的渠道优先;失败自动 fallback 到下一个
随机模式:按权重比例随机分配,实现负载均衡
配置示例:把 US 和 HK 两个渠道都加上 claude-sonnet-4-6 模型,US 权重设 70,HK 权重设 30,则 70% 的请求走美区,30% 走港区,任意一个挂了自动切换。
Docker Compose 多实例模板
services:
new-api:
image: calciumion/new-api:latest
container_name: new-api
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- ./data:/data
networks:
- ai-gateway
cliproxy-us:
image: ghcr.io/cliproxyapi/cliproxyapi:latest
container_name: cliproxy-us
restart: unless-stopped
volumes:
- ./config-us:/app/config
networks:
- ai-gateway
cliproxy-hk:
image: ghcr.io/cliproxyapi/cliproxyapi:latest
container_name: cliproxy-hk
restart: unless-stopped
volumes:
- ./config-hk:/app/config
networks:
- ai-gateway
networks:
ai-gateway:
driver: bridge
两个 CLIProxyAPI 容器分别挂载不同的配置目录(不同账号池),在 new-api 里分别填写:
http://cliproxy-us:8317/v1http://cliproxy-hk:8317/v1
注意事项
- 模型名一致:两个渠道如果都提供
claude-sonnet-4-6,new-api 才能做负载均衡;名字不一致会被视为不同模型。 - 健康检查:多渠道时强烈建议开启自动禁用,避免某个 CLIProxyAPI 实例的账号全部触发限流后请求仍然被路由过去。
- 日志区分:new-api 日志的「渠道」列会显示是哪个渠道响应的,方便排查问题。
系列导航
- (一)入门——把 CLI 订阅变成标准 API
- (二)多账号轮询与配额策略
- (三)接入主流 AI 编程工具
- (四)生产部署——Nginx、TLS 与安全加固
- (五)Antigravity——用 Google 订阅解锁 Claude Opus 4.8
- (六)结合 new-api 打造多用户 API 网关(本文)
- (七)自动化运维——配额监控与告警
- (八)cpa_keeper 与 cpa_cost——用量追踪与成本分析工具
实操清单
- new-api 二进制部署并运行(systemd 服务,:3000)
- Caddy 反代已配置(https://airouter.k330.com → localhost:3000,flush_interval -1)
- 管理员账号已修改(用户名 sdmike,非默认 root/123456)
- CLIProxyAPI 渠道已添加(类型 OpenAI,代理
http://localhost:8317/v1) - 渠道模型已配置(claude-opus-4-8 / 4-7 / 4-6、sonnet-4-6 / 4-5、haiku-4-5、gemini-3.5-flash 等 11 个)
- 渠道测试通过(响应 1243ms)
- DeepSeek 渠道已添加(deepseek-v4-flash / deepseek-v4-pro)
- 访问令牌已创建(「不止词元claude」无限额度、default)
- 成员账号已创建(pearl 普通用户)
- 完整链路已验证(7 次请求成功,used_quota 有记录)
- 为渠道开启自动禁用健康检测(auto_ban=1,CLIProxyAPI 和 deepseek 渠道均已启用)
- 验证流式输出:
curl https://airouter.k330.com/v1/chat/completions ... "stream": true逐块返回 SSE,无缓冲 - 在「日志」页确认每次请求的 Token 消耗记录正常(prompt/completion token 字段有值)