最直接的处理方式是在启动 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 正在后台运行,先彻底关闭它。在任务管理器或终端中确认没有
ollama serve进程。 - 配置环境变量:
- 开发测试:设置
OLLAMA_ORIGINS="*"。 - 生产环境:设置具体域名,如
OLLAMA_ORIGINS="https://example.com",多个域名用逗号分隔。
- 开发测试:设置
- 持久化配置(可选):
- Linux systemd:编辑
/etc/systemd/system/ollama.service,在[Service]下添加Environment="OLLAMA_ORIGINS=...",然后执行systemctl daemon-reload和systemctl restart ollama。 - Windows:在系统环境变量设置中新增
OLLAMA_ORIGINS,或每次启动前在终端设置。
- Linux systemd:编辑
- 启动服务:运行
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