如何解决 Ollama 服务 CORS 跨域错误导致前端网页无法调用 API

文章导读
最直接的处理方式是在启动 Ollama 服务前配置 OLLAMA_ORIGINS 环境变量,指定允许跨域的前端域名。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 参考来源
A A

最直接的处理方式是在启动 Ollama 服务前配置 OLLAMA_ORIGINS 环境变量,指定允许跨域的前端域名。

先说结论:通过环境变量白名单放行特定域名,开发环境可临时放宽。

  • 先确认浏览器控制台报错是否为 CORS 策略拦截
  • 先设置环境变量再重启服务
  • 再验证接口响应头是否包含允许来源

命令速用版

如果你正在使用命令行启动,可以在启动前追加环境变量。以下是常见系统的临时设置命令:

# macOS / Linux
export OLLAMA_ORIGINS="*" && ollama serve

# Windows PowerShell
$env:OLLAMA_ORIGINS="*"; ollama serve

# Windows CMD
set OLLAMA_ORIGINS=* && ollama serve

注意:* 代表允许所有域名,仅建议在本地开发测试使用,不要直接用于公网暴露的服务。

为什么会这样

浏览器出于安全考虑,默认禁止网页向不同域名的服务器发送请求,除非服务器明确同意。Ollama 服务默认只允许本地请求,当你的前端网页部署在不同端口或域名时,浏览器会拦截请求并报 CORS 错误。这不是网络不通,而是服务端缺少允许跨域的响应头。

如何解决 Ollama 服务 CORS 跨域错误导致前端网页无法调用 API

分步处理

按照以下顺序修改配置,确保服务重启后生效:

  1. 停止当前服务:如果 Ollama 正在后台运行,先彻底关闭它。在任务管理器或终端中确认没有 ollama serve 进程。
  2. 配置环境变量
    • 开发测试:设置 OLLAMA_ORIGINS="*"
    • 生产环境:设置具体域名,如 OLLAMA_ORIGINS="https://example.com",多个域名用逗号分隔。
  3. 持久化配置(可选)
    • Linux systemd:编辑 /etc/systemd/system/ollama.service,在 [Service] 下添加 Environment="OLLAMA_ORIGINS=...",然后执行 systemctl daemon-reloadsystemctl restart ollama
    • Windows:在系统环境变量设置中新增 OLLAMA_ORIGINS,或每次启动前在终端设置。
  4. 启动服务:运行 ollama serve 或通过系统服务启动。

怎么验证是否生效

打开浏览器开发者工具(F12),切换到 Network 面板,刷新页面触发请求:

  • 查看请求状态码,应为 200 而非被拦截。
  • 点击具体的 API 请求,查看响应头(Response Headers)。
  • 确认包含 Access-Control-Allow-Origin 字段,且值为你设置的域名或 *

也可以使用 curl 命令模拟跨域请求检查:

curl -H "Origin: http://test.com" -v http://localhost:11434/api/tags

观察返回头中是否包含 Access-Control-Allow-Origin

常见坑

  • 安全风险:不要在生产环境对公网 IP 使用 *,否则任意网站都可以调用你的模型接口,消耗资源或窃取数据。
  • 环境变量未生效:在 Linux 使用 systemd 时,直接修改 .bashrc 无效,必须修改 service 文件。
  • 端口占用:修改配置后启动失败,检查是否旧进程未完全退出,默认端口为 11434。
  • 协议匹配:设置域名时建议带上协议头(http/https),部分浏览器对混合内容敏感。

参考来源

  • Ollama GitHub Repository, README.md, Environment Variables section. URL: https://github.com/ollama/ollama