结论:
- 先不要直接判断为“跨域未配置”。
- 结合你的现象,优先级更高的原因是:
- LobeChat 容器访问不到宿主机上的 Ollama
- Ollama 只监听了
127.0.0.1:11434
- LobeChat 开启了“客户端请求模式”,浏览器直连时被 CORS 拦截
- 正确处理顺序:
- 先确认 Ollama 监听地址
- 再确认 LobeChat 的请求模式
- 最后再配置
OLLAMA_ORIGINS
原因:
- 你截图里填过:
http://127.0.0.1:11434
http://192.168.3.201:11434
- 这两种都失败,说明不能只按“前端跨域”判断。
- 在容器场景中:
127.0.0.1 指向 LobeChat 容器自己
- 不是 NAS 宿主机
- 如果 LobeChat 默认通过服务端访问 Ollama,则报错常见原因是:
- 容器到宿主机网络不通
- Ollama 未监听外部地址
- 如果启用了“客户端请求模式”,则浏览器会直接访问 Ollama:
处理步骤:
1. 在飞牛主机上确认 Ollama 是否正常
执行:
curl http://127.0.0.1:11434/api/tags
预期结果:
- 返回模型列表 JSON
- 若失败,先排查 Ollama 服务本身
再执行:
ss -lntp | grep 11434
判定标准:
127.0.0.1:11434
说明:
- Ollama 仅本机可访问
- 容器 / 局域网设备无法访问
- 若看到:
0.0.0.0:11434
说明:
2. 修改 Ollama 监听地址
目标配置:
OLLAMA_HOST=0.0.0.0:11434
如果是 systemd 方式安装
查看服务:
systemctl cat ollama
编辑覆盖配置:
sudo systemctl edit ollama
写入:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
重载并重启:
sudo systemctl daemon-reload
sudo systemctl restart ollama
sudo systemctl status ollama --no-pager
再次确认监听:
ss -lntp | grep 11434
3. 如果飞牛商城里的 Ollama 是容器部署
先查看容器:
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Ports}}"
查看环境变量:
docker inspect <ollama容器名> | grep -A 30 '"Env"'
目标环境变量:
OLLAMA_HOST=0.0.0.0:11434
OLLAMA_ORIGINS=*
如果支持 Compose / 应用编辑,写法如下:
environment:
- OLLAMA_HOST=0.0.0.0:11434
- OLLAMA_ORIGINS=*
说明:
OLLAMA_ORIGINS=* 先用于验证
- 验证通过后再收敛为明确来源
4. 确认 LobeChat 当前使用的是哪种访问模式
你截图中有选项:
判定规则:
模式 A:未开启“客户端请求模式”
请求路径:
- LobeChat 后端 / 容器 -> Ollama
关键要求:
- LobeChat 容器必须能访问 NAS 上的
11434
- 此时 跨域不是首要问题
推荐填写:
http://宿主机IP:11434
不推荐填写:
http://127.0.0.1:11434
原因:
模式 B:开启“客户端请求模式”
请求路径:
关键要求:
- 浏览器能访问
http://NAS_IP:11434
- Ollama 必须允许该页面来源跨域访问
此时需要配置:
OLLAMA_ORIGINS=http://NAS_IP:LobeChat端口,https://你的域名
5. 跨域配置建议
临时排障配置
[Service]
Environment="OLLAMA_ORIGINS=*"
用途:
正式配置
假设:
- 飞牛地址:
http://192.168.3.201
- LobeChat 页面地址:
http://192.168.3.201:3210
则建议:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=http://192.168.3.201:3210,http://192.168.3.201,http://localhost,http://127.0.0.1"
如果你是通过 HTTPS 域名访问 LobeChat,则加上:
Environment="OLLAMA_ORIGINS=https://chat.example.com"
注意:
OLLAMA_ORIGINS 填的是 页面来源
- 不是 Ollama 自己的地址
- 不要只填
http://192.168.3.201:11434
6. LobeChat 中地址该怎么填
优先这样测试:
http://192.168.3.201:11434
不要用:
http://127.0.0.1:11434
原因:
命令 / 配置示例:
systemd 方式完整示例
sudo systemctl edit ollama
写入:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
执行:
sudo systemctl daemon-reload
sudo systemctl restart ollama
curl http://127.0.0.1:11434/api/tags
ss -lntp | grep 11434
Docker 方式完整示例
environment:
- OLLAMA_HOST=0.0.0.0:11434
- OLLAMA_ORIGINS=*
ports:
- "11434:11434"
验证方法:
验证 1:本机 API
curl http://127.0.0.1:11434/api/tags
结果:
- 成功:Ollama 正常
- 失败:先修复 Ollama 服务
验证 2:局域网地址
在 NAS 主机执行:
curl http://192.168.3.201:11434/api/tags
结果:
- 成功:已监听外部地址
- 失败:
OLLAMA_HOST 未生效或端口未开放
验证 3:浏览器访问
浏览器打开:
http://192.168.3.201:11434/api/tags
结果:
- 能看到 JSON:浏览器可直连
- 打不开:网络 / 监听 / 防火墙问题
验证 4:浏览器控制台
在 LobeChat 页面按 F12,查看:
重点看是否出现:
CORS policy
Failed to fetch
ERR_CONNECTION_REFUSED
ERR_CONNECTION_TIMED_OUT
判定:
CORS policy:跨域问题
REFUSED / TIMEOUT:连通性问题
注意事项:
127.0.0.1 不适用于容器内访问宿主机。
OLLAMA_ORIGINS=* 仅建议临时排障使用。
- 如果飞牛应用商城对容器环境变量做了封装,可能需要:
- 在应用高级设置中改环境变量
- 或导出 Compose 后手动修改
- 若你通过反向代理访问 LobeChat,必须把实际前端来源加入白名单:
建议的最短执行方案:
- 在飞牛主机执行:
curl http://127.0.0.1:11434/api/tags
ss -lntp | grep 11434
- 若监听不是
0.0.0.0:11434,给 Ollama 增加:
OLLAMA_HOST=0.0.0.0:11434
- 同时临时增加:
OLLAMA_ORIGINS=*
- LobeChat 中只填:
http://192.168.3.201:11434
- 若仍失败,基本可判定不是跨域,而是 LobeChat 容器到宿主机网络不通。
需补充的信息:
- 飞牛系统版本
- Ollama 是系统自带应用,还是你自己用 Docker / 脚本安装
- LobeChat 的访问地址
http://IP:端口
- 或
https://域名
- 是否开启“使用客户端请求模式”
- 以下命令输出:
curl http://127.0.0.1:11434/api/tags
ss -lntp | grep 11434
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Ports}}"