很多人搜「ollama server set api key」,其实卡在两件事上:一是 Ollama 本身不给你发 key,随便在环境变量里塞一个字符串并不会让接口变安全;二是 key 到底该由 Ollama 管、由前面的网关管,还是由调用方自己带,搞混了就白折腾。这篇按场景把判断标准和落地步骤讲清楚,最后给一份改完不生效的排查顺序。
搜「ollama server set api key」的人,八成卡在同一件事上:把 Ollama 当成一个会发 token 的服务,以为在环境变量里塞个字符串就完事了。实际上这层鉴权基本不是在 Ollama 内部完成的,而是在它前面加的一层网关或代理。先搞清楚钥匙该由谁管,比急着改配置重要得多。
下面按「谁管 key — key 放哪 — 改完怎么验 — 平时怎么养」四步走。每一步都给判断口径和能照着敲的动作,最后给一份不生效时的排查顺序。如果只是想确认自己有没有把服务暴露到公网,可以先到站内检测工具那类页面看一遍口径。
先想清楚:这个 key 该由谁来管
- Ollama 内建鉴权
- 默认没有面向调用方的 key 发放与校验机制,别指望它自己拦人。
- 前置网关鉴权
- 在 Ollama 前面放一层代理,由代理校验调用方带来的令牌,再转发请求。
- 统一网关代管
- 如果已经接了对话前端或知识库工具,优先让那一层管 key。
判断口径很简单:只在 loopback 上跑、调用方就是你自己,通常不需要 key;一旦服务能被局域网其他机器或公网访问,鉴权就必须在 Ollama 之外补上。不确定自己属于哪种,先到 /tools/verify 看清检测口径,再决定要不要加鉴权层,别反过来先配一串字符再想需求。
- 只本机自用:不需要 key,重点是别把监听地址开到全网。
- 小团队内网共享:适合在反向代理上做一层令牌校验,Ollama 只做推理。
- 已接统一网关:鉴权交网关,Ollama 侧保持默认,避免两处规则打架。
- 要对外暴露:必须加鉴权层,并同时限制 Ollama 端口只在内网可见。
三种常见放 key 的位置,各自的落地做法
- 开机自启(systemd / launchd)鉴权相关环境变量写进服务单元或 plist,改完要重载单元再重启服务;只在当前 shell export 是不生效的,验证方式是看服务进程实际读到的变量。
- 容器启动令牌通过 env 或 secret 注入代理容器,别写进镜像。容器里写的 localhost 指向容器自己,指向宿主机 Ollama 必须换成宿主机在容器网络里的地址。
- 反向代理由代理统一校验调用方令牌,再转发给 Ollama 的本地端口;显式转发来源地址,否则访问记录里全是代理自己的地址,排障会被误导。
| 场景 | key 放哪 | 最容易踩的坑 |
|---|---|---|
| 本机 loopback | 不放 | 把监听地址改成全网可见 |
| systemd / launchd 自启 | 服务单元里的环境变量 | 改完没重载单元,只重启了进程 |
| 容器 | env 或 secret 注入代理 | 容器里的 localhost 指向容器自身 |
| 反向代理 | 代理侧配置或密钥文件 | 没转发来源地址,日志看不出来源 |
无论哪种方式,key 都别写进会被提交的配置文件。用临时环境变量或外部密钥文件注入,换 key 时先加新值再删旧值,避免调用方集中报错。具体接口路径和参数口径以站内页面当时展示的为准,别长期靠记忆。
改完怎么验证,不生效按这个顺序查
验证要分两步:不带令牌直接请求,应该被挡回未授权;带正确令牌请求,应该能正常拿到模型列表或补全结果。两步都过才算配置成功,只测其中一步容易得出错误结论。
- 查进程实际环境用系统自带方式查看服务进程的环境变量,而不是看终端里 echo 出来的值——两者经常不是同一份。
- 查令牌格式多数情况要求按标准请求头传递,前缀和大小写都要对;网上抄来的示例经常少了前缀。
- 查网络路径确认调用方打的是代理端口而不是 Ollama 直连端口,也确认服务监听地址对调用方可见。/ai-dict/category/infra 里有监听地址等术语的对照。
- 查推理本身本地推理慢或响应异常时别急着怀疑鉴权,按 /tools/speed-test 量一遍延迟,把网络耗时和推理耗时分开看。
环境变量改了不生效,九成是改错了地方,不是配错了值。
上线前后要养成的几个习惯
- 给令牌设置有效期和轮换计划,轮换时先在代理侧加新值再删旧值。
- 对外只开代理端口,Ollama 默认端口限制在本机或内网。
- 接口地址和令牌分开存放,日志里不要打印完整令牌。
- 定期核对模型与接口规格说明,路径与参数以站内页面当时展示的为准。
这些习惯里最容易被跳过的是第三条。排查问题时图省事把令牌打进日志,等于把钥匙贴在门上。要用就用前后几位代替,既能定位又不泄露。
另外,如果你们是通过中转站调用模型的,鉴权方式和中转站本身的资质是两回事。选之前可以到 /sites 看看各家的检测信息,再决定是自建鉴权层还是走现成的。
下一步确认完自己的暴露面之后,顺手看一眼中转站的可信度记录,能省掉很多事后排查。→常见问题
Ollama 自己能不能生成 API key?
不能。它默认不带账号体系,也不会给你发 key;你在环境变量里随便设一个字符串,接口照样是谁都能调。真要做鉴权,得在它前面放一层反向代理或网关来校验令牌,Ollama 只当后端推理服务用。
照着教程改完环境变量,为什么还是没生效?
大概率是改的位置不对。以服务方式运行时,它读的是服务单元里的环境,不是你在终端 export 的那份。改完要重载服务配置并重启服务,再确认调用方打的是代理端口而不是直连端口。
局域网里几台机器要用,key 有必要吗?
看网络信任范围。如果整个局域网都是可信设备、端口也不对外,图省事可以不配;只要有访客网络、外包同事或出口映射,就建议加一层鉴权,并顺手把 Ollama 的监听限制在内网地址上。