Skip to content

OctaFuse v2.9.0

Latest

Choose a tag to compare

@github-actions github-actions released this 05 Sep 13:38
9c1761f

本次更新

OctaFuse Gateway v2.9.0 重点完善流量治理、用量观测和管理体验。管理员现在可以分别限制单个用户与单把 API Key 的请求频率,通过新的密钥分析和入口域名记录定位流量来源;管理后台总览与路由调试也更加直观。同时,本版本支持为 Cloudflare Proxy 和 Admin 配置多个自定义域名,并补充 Gemini 3.8 Flash 与 SiliconFlow 国际站预设。

变更内容

Proxy

  • 用户与 API Key 双层限流:用户级 RPM 控制该用户所有 Key 的合计请求量,Key 级 RPM 控制单把密钥。两层独立执行,并采用从当前时刻回溯 60 秒的滚动窗口,而不是按自然分钟重置。
  • 清晰的超限反馈:超过任一层上限时返回 429 gateway.rate_limited,并通过 Retry-After 告知再次尝试前需要等待的时间。GET /v1/me 不参与两层计数,客户端仍可查询当前密钥与额度状态。
  • 入口与密钥观测:请求日志新增 ingress_host,记录请求实际进入的 Host,但不参与访问控制;每次成功写入请求用量时同步更新 API Key 的 last_used_at
  • 路由自定义请求头:路由 custom_params.headers 会作为上游 HTTP Headers 发送,不再混入 JSON 请求体。鉴权、Host、Content-Length 等受保护请求头不会被自定义值覆盖。
  • 默认参数合并:除 headers 外的 custom_params 继续作为上游请求体默认值,并与客户端 JSON 深度合并;客户端显式值优先,因此该配置不能用作强制参数上限。
  • 计费记录一致性:Chat、Responses、Anthropic Messages 和 Gemini 共用结构化的计费记录流程,统一整理用量、错误和上游请求 ID 后再写入日志;现有计费口径保持不变。
  • Images Edits 文件字段:调用 OpenAI Images Edits 时,单张参考图使用 image,多张参考图使用 image[],改善不同 OpenAI 兼容上游的接收兼容性。

Admin

  • 用户合计 RPM:用户详情页可配置该用户所有 API Key 共享的过去 60 秒请求上限,用户列表会同步展示该限制。
  • 单 Key RPM:Keys 页面可为每把密钥设置独立上限。空值表示不限,0 表示拒绝所有计次请求;界面与 Admin API 均只接受非负整数。
  • Dashboard 升级:首页集中展示请求量、成功率、平均延迟、用户费用、趋势、热门模型、活跃用户、近期请求和错误信息,更适合日常运营巡检。
  • API Key 用量分析:新增按 Key 汇总的请求量、Token、费用和最近使用时间;用户请求日志支持按 api_key_id 筛选,便于排查具体客户端或应用。
  • 分析页面对比:模型、供应商和用户用量页面支持同时展开多条明细,减少逐项对比时反复开合。
  • 路由联调可见性:路由编辑区将上游请求头与 JSON 默认参数分开配置;Playground 可预览最终发送的请求头和上游请求体,鉴权类敏感请求头会自动脱敏,降低配置验证成本。
  • 供应商与模型目录:新增 SiliconFlow 国际站导入模板并区分国内、国际端点,在供应商导入和配置界面补充平台或密钥页面快捷入口;新增 Gemini 3.8 Flash 模型预设,为 DeepSeek V4 Pro / Flash 的内置预设补齐工作日官方高峰时段,并修正 23 个阿里云百炼模型的 USD / CNY 预设价格。
  • 自托管管理后台修复:修复 Node / Docker 管理后台经反向代理访问时,创建或修改集成密钥可能被同源校验误判为 403 的问题;非同源写操作仍会被拒绝。
  • 交互一致性:多处保存、删除和异常反馈统一使用页面通知与确认对话框,减少浏览器原生提示带来的割裂感。

Core / 部署

  • 迁移 0028users.rate_limit 保存用户共享限流,api_keys.rate_limit 保存单 Key 限流;api_key_request_logs.ingress_host 保存入口 Host,并增加 ingress_host + created_at 查询索引。D1、Postgres 与 MySQL 使用相同字段语义。
  • 滚动窗口实现:Key 与用户窗口分别维护过去 60 秒的请求时间,跨 UTC 自然分钟不会重置;超限层决定本次 Retry-After
  • Cloudflare 多自定义域名:部署配置中的 PROXY_CUSTOM_DOMAINADMIN_CUSTOM_DOMAIN 可以使用逗号分隔多个 Host;空白项会被忽略,重复域名会去重,原有单域名写法无需调整。
  • 计价展示选择:多条路由优先级和权重相同时,目录展示会选取当前综合倍率更低的代表路由,使前台折扣信息更贴近可用价格;实际请求仍遵循原有路由策略。

文档

  • 限流与观测:补充用户 / Key 双层 RPM、滚动窗口、Retry-AfterGET /v1/me 豁免、单实例软上限与入口 Host 的接口和数据模型说明。
  • 路由请求配置:明确自定义 Headers、请求体默认参数、客户端值优先规则及受保护请求头边界。
  • Cloudflare 部署:补充多域名环境变量格式、生成配置和部署行为。

升级说明

  • 数据库迁移:必须应用 0028;三种数据库语义一致。迁移为 usersapi_keysapi_key_request_logs 增加可空字段,并创建入口 Host 查询索引。
  • 发布顺序:建议先备份数据库,使用 v2.9.0 migrate 镜像或对应迁移命令执行 0028,再滚动更新同版本 Proxy 与 Admin。旧版本回退时可以保留新增列,无需立即删除。
  • 存量兼容:未配置 rate_limit 的用户与 API Key 保持不限流;原有客户端端点和鉴权方式不变;单个 Cloudflare 自定义域名配置继续有效。
  • 运行限制:RPM 窗口默认保存在每个 Proxy 进程 / isolate 的内存中,不在数据库共享。Node 单进程接近精确;多进程、多副本及 Cloudflare 多 isolate 环境属于软上限,进程重启会清空当前窗口。
  • 配置规则:用户级 RPM 与 Key 级 RPM 不要求互相复制或满足大小关系;同时设置时,单把 Key 同时受自身上限和用户共享池剩余量约束。RPM 必须为非负整数。
  • 路由参数custom_params.headers 仅用于上游请求头;其余 custom_params 是默认请求体参数。客户端显式参数优先,不能仅凭此配置实现强制封顶。
  • 建议操作:部署后分别验证用户级和 Key 级限流、429 Retry-After/v1/me 查询;确认请求日志能看到入口 Host 和 API Key 最近使用时间;检查 Key 用量分析、Dashboard、自定义上游请求头和多域名入口;最后冒烟既有 Chat / Responses / Messages / Gemini / Images / Audio 路由。

容器镜像

ghcr.io/octafuse/octafuse-gateway-proxy:v2.9.0
ghcr.io/octafuse/octafuse-gateway-admin:v2.9.0
ghcr.io/octafuse/octafuse-gateway-migrate:v2.9.0

相关链接