· Jeff · 教程  · 9 分钟阅读

用 New API 搭建 API 中转站:密钥安全分发与变现完整指南

从公益共享到小商业分发,用 New API(one-api 社区增强版)搭建自己的 API 中转平台。原始 Key 锁后台、子令牌分发,额度可控、权限可管、用量可追溯,附 Docker 部署五步走、安全加固清单与套餐定价参考。

从公益共享到小商业分发,用 New API(one-api 社区增强版)搭建自己的 API 中转平台。原始 Key 锁后台、子令牌分发,额度可控、权限可管、用量可追溯,附 Docker 部署五步走、安全加固清单与套餐定价参考。

用 New API 搭建 API 中转站:密钥安全分发与变现完整指南

你有没有过这样的场景:搞到一个不错的模型 API Key,想分享给朋友、同事,或者干脆做一个小生意,把额度分发出去——但直接发 Key 是灾难:别人拿着你的原始 Key,能看额度、能到处转发、甚至能刷爆你的账单。

New API 就是为解决这个问题而生的:它是开源 API 网关 one-api 的社区增强版,GitHub 30K+ stars,核心思路一句话——原始 Key 锁后台,子令牌分发,额度可控、权限可管、用量可追溯。

这篇文章从部署到变现给你完整走一遍。

适用:个人 / 公益共享 / 小站点运营 | 更新:2026-08-25


一、为什么不能直接发 Key

对比直接发 KeyNew API 中转
密钥安全原始 Key 公开,无法收回原始 Key 锁在后台,只发子令牌
额度控制无法限制每人精确额度,用完自动停
有效期靠自觉回收精确到秒,到点失效
滥用止损发现也无法中途停后台点一下吊销,零延迟
用量追溯不知道谁用了多少全量记录每次调用、模型、消耗
多资源整合发一堆 Key统一入口,一个令牌调用所有

简单说:直接发 Key 是把保险箱钥匙给别人,中转是给每个人一张限额的购物卡。


二、选型:New API 还是 LiteLLM

场景推荐理由
个人 / 公益共享 / 小站点运营New API自带 Web 管理面板、额度/令牌管理开箱即用
企业高并发 / 复杂路由LiteLLM更偏基础设施,路由策略强大但上手门槛高

如果你的目标是「分给几十上百人用 + 看得见谁用了多少」,New API 是成本最低的选择。


三、部署五步走

第 1 步:环境准备

  • 一台云服务器:2C2G 起步(建议 2C4G),Linux(Ubuntu/Debian/CentOS 均可)
  • 安装 Docker(≥ 20.10)与 Docker Compose
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker

第 2 步:docker-compose.yml

New API 官方推荐 MySQL 8.0 + Redis 7 + New API 三件套。下面是最小可用配置:

services:
  mysql:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 改成强密码
      MYSQL_DATABASE: new_api
    volumes:
      - mysql_data:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password

  redis:
    image: redis:7
    restart: always
    volumes:
      - redis_data:/data

  new-api:
    image: calciumion/new-api:latest
    restart: always
    depends_on:
      - mysql
      - redis
    ports:
      - "3000:3000"
    environment:
      SQL_DSN: root:改成强密码@tcp(mysql:3306)/new_api
      REDIS_CONN_STRING: redis://redis:6379
      SESSION_SECRET: 用 openssl rand -hex 16 生成
      CRYPTO_SECRET: 用 openssl rand -hex 16 生成
    volumes:
      - new_api_data:/data

volumes:
  mysql_data:
  redis_data:
  new_api_data:

三个必须改的地方:

  1. MYSQL_ROOT_PASSWORDSQL_DSN 里的密码——改成你的强密码(两处一致)
  2. SESSION_SECRET——会话签名密钥
  3. CRYPTO_SECRET——令牌加密密钥

后两个用一条命令生成即可:

openssl rand -hex 16

启动:

docker compose up -d
docker compose logs -f new-api   # 看到监听 3000 即成功

第 3 步:初始化

浏览器访问 http://你的IP:3000

  1. 注册并设置管理员账号
  2. 模式选择**「自用模式」**(公益共享也选这个,不要开放注册)
  3. 在「令牌」页创建子令牌,设置额度与有效期

第 4 步:HTTPS + 反代(必须做)

直接裸奔 3000 端口等于把管理员后台暴露给全网。用 Nginx + Certbot 反代:

server {
    listen 443 ssl;
    server_name api.你的域名.com;

    ssl_certificate     /etc/letsencrypt/live/api.你的域名.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.你的域名.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    listen 80;
    server_name api.你的域名.com;
    return 301 https://$host$request_uri;
}

证书签发:

certbot --nginx -d api.你的域名.com

关键安全动作:安全组/防火墙关闭 3000 端口,只留 80/443。这样别人只能走 HTTPS 域名访问,摸不到原始端口。

第 5 步:对外分享

只给两样东西,永远不要给后台地址和管理员账号

  • 接口地址:https://api.你的域名.com/v1
  • 子令牌:sk-xxxxx

用户在任意 OpenAI 兼容客户端里填这两个就能用,跟官方 API 完全兼容。


四、安全加固 Checklist

等级项目
🔴 必须关闭 3000 端口,仅留 80/443
🔴 必须全站 HTTPS(Certbot 免费证书)
🔴 必须修改默认管理员密码、关闭开放注册
🟡 建议管理员账号启用 2FA
🟡 建议改 SSH 端口、禁止 root 密码登录
🟡 建议数据库定期备份(mysqldump + 定时任务)
🟡 建议每个用户单独建令牌,不用一个令牌通吃

⚠️ 红线:子令牌只对用户展示一次,后台不存明文;用户跑路/滥用,后台吊销对应令牌即可,原始 Key 全程不落地。


五、小商业套餐参考(2024 年末行情)

如果打算做小生意,常见定价:

套餐月费目标客户
体验版¥15-20轻度个人用户
标准版¥30-50日常高频使用者
畅享版¥80-120重度开发调用

成本侧:月运维成本约 ¥55-80/月(云服务器 ¥50-70 + 域名摊销 ¥3-5)。也就是说,拉到 2-3 个标准版用户即可回本,之后就是纯利。

建议:先公益跑 1-2 个月攒口碑,再逐步转付费;定价参考官方渠道价差的 50%-70% 更有竞争力。


六、常见问题

New API 和 one-api 有什么区别?

one-api 是上游,New API 是社区增强版,持续跟进新模型、修复更快,中文文档和社区更活跃。新项目直接用 New API。

用户报错 401 / 余额不足?

去后台「日志」页查该令牌的实际调用记录——多半是额度用尽或过期,后台续期即可。

想加新模型源?

后台「渠道」页添加上游渠道(DeepSeek / OpenAI / 各家中转),填原始 Key,之后所有子令牌自动可用,无需重新分发。

会不会有法律风险?

中转本身是中性技术。做公益共享没问题;商业化务必:只转自己有合法使用权的渠道、不碰违规内容、按用户实名/协议留痕,参照国内 IDC 与内容合规要求。


总结

New API 的价值一句话:把「发 Key」变成「发令牌」——原始 Key 永远锁在后台,对外只暴露额度可控、可吊销、可追溯的子令牌。

部署五步走回顾:环境 → docker-compose(三件套)→ 初始化选自用模式 → HTTPS 反代 + 关 3000 → 只发接口地址 + 子令牌。

如果你正好有闲置的模型 Key 或者一台小服务器,这套方案是成本最低的「共享 → 变现」路径。也欢迎看看站内其他文章:

☕ 如果这篇文章对你有帮助

欢迎请 Jeff 喝杯咖啡,支持我持续分享更多软件技巧~

打赏功能即将上线,先点个赞也是支持 ❤️

返回博客

相关文章

查看全部 »
进程还在,端口已死:一个单线程 HTTP 服务的「假活」陷阱,和我的四层加固

进程还在,端口已死:一个单线程 HTTP 服务的「假活」陷阱,和我的四层加固

我自建的一个统计面板曾经挂了整整 16 天我才发现:进程从没退出、端口一直在 LISTEN、CPU 占用是零,看上去「健康得不得了」,可所有新连接都拿不到响应,公网一律 504。根因是单线程 HTTPServer 没有 socket 超时,被一条半开连接永久阻塞;更值得记的是第二层——进程监督器只认「进程存活」,这种假活对它完全不可见。这次我给它上了四层加固,也第一次想明白:为什么「重启脚本」这种修复,会被下一次部署悄悄冲掉。

自建 AI Agent 记忆系统的冲突消解:软失效、事件账本,和同一个 bug 我修了两次

自建 AI Agent 记忆系统的冲突消解:软失效、事件账本,和同一个 bug 我修了两次

Agent 的记忆越攒越多,新事实和旧事实开始打架。本文记录我给自己那套记忆系统做「冲突消解」的完整实现:为什么不能直接删、软失效 + 事件账本怎么设计、用什么判据判定两条记忆冲突。重点是一个真实的翻车——判据太激进,一条新记忆横扫了 50 条无关事实,误杀 19 条。更值得记的是:同一个 bug,我修了两次。

Google Search Console 从验证到收录:新站接入实操与踩坑清单

Google Search Console 从验证到收录:新站接入实操与踩坑清单

新站被搜索引擎冷落,第一步不是狂发外链,而是把 Google Search Console 接上——它决定你能不能看见「爬虫到底来没来、收录卡在哪」。这篇是完整实操:网域还是网址前缀、四种验证方式怎么选、DNS TXT 验证的准确姿势、验证后必做的三件事、多久有数据,以及我踩过的六个坑,附 GSC / Bing / 百度三平台对照。