Sudden “Unauthorized: Invalid API Key” with this morning’s build

这个报错通常出现在使用带 --api-key-file (API Key 鉴权)的 llama-server 并访问内置 WebUI 时:前端静态资源被错误地纳入 API Key 校验,导致页面白屏、控制台报 Unauthorized: Invalid API Key 。优先排查是否使用了 API

快速结论:这个报错通常出现在使用带 --api-key-file(API Key 鉴权)的 llama-server 并访问内置 WebUI 时:前端静态资源被错误地纳入 API Key 校验,导致页面白屏、控制台报 Unauthorized: Invalid API Key。优先排查是否使用了 API Key 以及 WebUI 静态资源是否被鉴权拦截。

适用环境:Linux x86_64;llama.cpp llama-server(version 8604 / 6307ec07d,GNU 13.3.0);现象在 b8591 之后、HEAD 上复现,b8591 正常。

最快修复方案:暂无确认的一步修复方案。Issue 中用户验证的临时规避方式是:不带 --api-key / --api-key-file 启动 llama-server,服务立即恢复正常。

注意事项:去掉 API Key 会关闭鉴权,只适合本地或可信内网临时使用;这不是官方修复。Issue 中也有用户直接改动 tools/server/server-http.cpp 移除鉴权逻辑,但该做法仅为个人 workaround,未在 Issue 中确认为官方方案。

问题场景

用户在 Linux 上编译最新 llama.cpp 后,用 llama-server 启动服务,启动参数包含 --api-key-file 指向 API Key 文件,并通过多台电脑的浏览器访问 llama-server 内置 WebUI。更新后 WebUI 完全白屏,浏览器没有任何可选操作,也看不到输入 API Key 的入口;服务端日志出现鉴权失败信息。

报错原文

srv  log_server_r: done request: GET / 192.168.1.101 200
Unauthorized: Invalid API Key

srv  update_slots: all slots are idle
srv  log_server_r: done request: GET / 127.0.0.1 200
Unauthorized: Invalid API Key
srv  log_server_r: done request: GET /bundle.js 127.0.0.1 401
Unauthorized: Invalid API Key
srv  log_server_r: done request: GET /bundle.css 127.0.0.1 401
Unauthorized: Invalid API Key

$ curl http://127.0.0.1:8080/bundle.css
{"error":{"message":"Invalid API Key","type":"authentication_error","code":401}}

$ curl http://127.0.0.1:8080/bundle.js
{"error":{"message":"Invalid API Key","type":"authentication_error","code":401}}

原因分析

从 Issue 讨论看,最可能的原因是 WebUI 的静态资源(如 /bundle.css、/bundle.js)被错误地放到了 API Key 鉴权之后。浏览器加载根路径 GET / 时能返回 200,但后续它需要拉取的 bundle.js / bundle.css 返回 401,于是页面脚本和样式加载失败,呈现为白屏。

Issue 中用户明确表示“/bundle.css 和 /bundle.js 似乎被 API Key 拦截,这是不正确的”,并称 b8591 正常、HEAD 失败,问题来自 b8591 之后的提交。也有评论怀疑 API Key 检查发生在前端与后端数据流中的错误位置。以上属于 Issue 中的判断,官方根因修复未在该讨论中给出明确说明。

环境排查

  • 确认 llama.cpp 版本:Issue 中为 version 8604(6307ec07d),使用 GNU 13.3.0 在 Linux x86_64 构建。
  • 确认是否使用 API Key:启动参数中是否包含 --api-key-file 或 --api-key。
  • 确认基线版本:Issue 中 b8591 可正常工作,b8591 之后到 HEAD 之间出现回归。
  • 确认受影响模块:llama-server,尤其是 WebUI 和静态资源路由。
  • 确认请求表现:GET / 可能返回 200,但 /bundle.js、/bundle.css 返回 401。
  • Issue 未提供 Python、CUDA、PyTorch、显卡或依赖版本信息,不需要额外假定这些项。

解决步骤

  1. 先确认当前服务是否启用了 API Key。检查启动命令或脚本中是否出现 --api-key-file 或 --api-key。
  2. 用 curl 直接访问 WebUI 静态资源,确认它们是否被鉴权拦截:
    curl http://127.0.0.1:8080/bundle.css
    curl http://127.0.0.1:8080/bundle.js

    如果返回 {"error":{"message":"Invalid API Key","type":"authentication_error","code":401}},说明与 Issue 现象一致。

  3. 临时规避:按 Issue 中用户验证的方式,不带 --api-key / --api-key-file 启动 llama-server,观察 WebUI 是否立即恢复。评论中明确写到“Works again immediately when starting the server without –api-key”。
  4. 如果必须保留鉴权,可优先尝试回退到 b8591 或 b8591 之前的构建,因为 Issue 中确认 b8591 工作正常、HEAD 失败。
  5. 不建议直接照搬评论里“删掉 tools/server/server-http.cpp 中授权逻辑”的做法。该做法会移除服务鉴权,且属于个人 workaround,未在 Issue 中确认为正式修复方案。
  6. 关注官方后续修复。Issue 已关闭时间为 2026-04-01T19:32:16Z,但该讨论提供的修复细节有限;更新到包含修复的构建后再验证。

验证方法

重新启动服务后,再次访问 WebUI 首页,确认页面不再白屏,浏览器控制台不再出现 Invalid API Key;同时用 curl 检查 /bundle.css 和 /bundle.js,确认它们不再返回 401。若在保留 API Key 的情况下这两个静态资源仍返回 401,说明问题未解决或当前构建仍包含该回归。

参考来源

ggml-org/llama.cpp #21229

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29001

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注