ollama环境变量ollama_host

模型与算力

讲清 OLLAMA_HOST 这个环境变量的含义、各系统下怎么设、设完怎么验证,以及改监听地址时的常见坑。

本地跑 Ollama 想换端口、想让局域网别的机器连上、想挂到内网一台服务器当公共接口,最后都会翻到 OLLAMA_HOST 这个变量。它到底管的是「监听地址」还是「访问地址」,Windows、macOS、Linux 上分别写在哪,改完为什么没生效,这篇按顺序捋一遍,给一套能直接照着做的设置与验证流程。改前先想清楚暴露在什么网络里,别顺手把服务开到所有网卡上。

本地跑 Ollama 想换端口、想让局域网别的机器连上、想挂到内网一台服务器当公共接口,最后都会翻到 OLLAMA_HOST 这个变量。它到底管的是「监听地址」还是「访问地址」,Windows、macOS、Linux 上分别写在哪,改完为什么没生效,这篇按顺序捋一遍,给一套能直接照着做的设置与验证流程。

先把一句话记住:这个变量是给服务进程看的,不是给你敲客户端命令时用的。改之前先想清楚这个实例要暴露在什么网络里,别顺手把服务开到所有网卡上;改之后一定要重启进程并复查监听状态,否则很容易以为自己改了个假变量。

OLLAMA_HOST 到底管哪一头

它设的是 Ollama 服务进程的监听地址与端口,也就是这个进程愿意在哪张网卡、哪个端口上等连接。默认通常只在本地回环上开一个口,所以同一台机器上的程序能访问,局域网里别的机器连不到。想清楚这一点,后面所有配置都是在回答「听谁的、听哪个口」。

  • 写 0.0.0.0 表示监听本机所有网卡,局域网内其他机器可以尝试连过来;写 127.0.0.1 表示只允许本机程序访问,两者对外表现完全不同。
  • 端口号跟在冒号后面,改端口和改监听范围可以在同一行里一起做,不用拆成两个变量。
  • 客户端工具里填的地址是访问地址,和服务端监听地址是两件事。你在某个工具配置里填的地址,是它去找服务时用的目标,不是服务自己听在哪。
  • 同一个变量在不同启动方式下读取时机不一样,图形启动和命令行启动可能一个读全局设置、一个读当前终端,别用错地方。

判断你该改哪一端

只本机用
保持默认回环监听,客户端访问地址填回环地址即可,不用动这个变量。
局域网别的机器要连
服务端监听范围需要放开,同时确认防火墙放行对应端口,客户端再填这台机器的可达地址。
内网当公共接口
除了放开监听,还要考虑访问控制和实例里跑的内容是否适合共享,别只改一个变量就上线。

各系统分别怎么设

各系统的差别不在变量名,而在于「服务进程从哪里读环境变量」。你以为你设了,但进程启动时根本没读到,这是最常见的一类问题。下面按平台给动作,改完都必须让服务进程真正重启一次。

  1. Linux用 systemd 的 override 或环境文件给服务进程注入变量,改完重载服务配置再重启进程。只在当前 shell 里 export 对后台服务无效,因为服务不是从你这个终端启动的。
  2. Windows变量要落在系统或用户级环境变量里,设完把服务退出再启动。托盘那类常驻进程尤其要确认真的退干净了,只点一下窗口关闭往往不算重启。
  3. macOS图形启动的应用不读你终端里的 export,要走系统级环境变量或让它以服务方式启动,然后重启应用本身,而不是只重开一个终端窗口。
  4. 容器变量写在容器启动参数或编排文件的环境段,别只写进镜像里的 shell 配置,那样运行时并不会自动带上。改完重建容器而不是只重启里面的进程。
平台变量写在哪怎样才算重启生效
Linux服务单元的环境文件或覆盖配置重载配置后重启服务,并复查监听状态
Windows系统或用户级环境变量完全退出常驻进程再启动,托盘图标消失为准
macOS系统级环境变量或服务方式启动退出并重新打开应用进程,不是重开终端
容器启动参数或编排文件的环境段重建容器,确认新环境变量已注入进程

设完怎么确认真的生效

不要靠「我记得设过了」来判断。先看进程自己的监听状态,再看别处能不能连进来,这两步能挡掉绝大多数「设了没用」的情况。下面的命令只是示意方向,参数细节按你系统上的工具查。

# 查看当前监听地址与端口,确认和你写的一致
ss -lntp | grep <你的端口>

# 从另一台机器试连一次,验证局域网可达性
curl http://<目标机器地址>:<端口>/
  • 本机能连不代表局域网能连,中间可能有防火墙、安全组或路由限制,必须换一台机器再试。
  • 进程没退干净时,旧进程仍占着原来的口,新设置看起来就像没生效;先确认进程只有一个。
  • 把访问地址、监听地址、端口三者的对应关系写一行备注贴在自己的笔记里,之后接工具时不容易填错。
  • 改回本机监听时同样要重启并复查,否则你以为是收回来了,实际上口还开着。

改监听范围之前先想清楚的事

监听到所有网卡,等于把接口交给你所在的网络。办公室内网和咖啡馆公共网络是两种风险等级,同一套配置换个环境含义就变了。判断标准不是「能不能连通」,而是「谁有可能连上、连上之后能做什么」。

  • 要不要加一层访问控制、要不要只在内网段开放,取决于这个实例里跑的是什么模型、有没有接私有数据,不要默认大家都只跑公开模型。
  • 不确定时先只在需要的那台机器上本机访问,确认需求后再放开范围,别一步开到底。
  • 不适用的情况:纯粹给自己用、机器不接入任何共享网络时,没必要折腾监听地址,保持默认更省事。
  • 多人共用的内网服务器,改之前跟负责网络的同事打声招呼,改完把新的可达地址同步给需要的人。
  • 团队如果有统一的部署口径,调整前后去站内安全与合规页面对一遍,别一个人把口子开大。

如果把 Ollama 当公共服务跑,建议顺手做两件事:给这个实例单独记一条备注,写清监听范围、端口和用途;过一段时间回来看它还该不该开在那。具体到某个模型、某条链路的实测对比,可以到站内对应的评测与追踪页面核对当时的数字,不用凭印象判断。

下一步如果你正在挑中转站或在比对不同接入方式的可用性,可以先看站内整理好的检测与导航页面,按自己的网络环境对一遍再决定怎么开放监听。

常见问题

OLLAMA_HOST 设成 0.0.0.0 之后还是连不上,先查什么?

先确认服务进程真的用新变量重启过,很多情况是旧进程还在跑;再看监听端口上的状态是否和你写的一致;然后从另一台机器上测,区分是服务没放开还是中间被防火墙挡住。这三步走完,问题基本能定位到具体一层。

这个变量和客户端里填的地址有什么区别?

前者决定服务进程在本机哪些网卡上等着被连,后者是别的程序去连它时用的地址。服务端放开、客户端填对,两个条件都满足才通。常见错误是只改了一边,然后误判成变量写错了。

多台机器想共用一个 Ollama 实例,怎么规划比较稳?

一般是把实例固定在一台常开的机器上,端口和监听范围写进配置,其他机器只当客户端。要注意并发上来后单卡的吞吐和排队表现会变差,具体能扛多少,按自己的模型和量化方式去 /models/deploy 做一遍测算再定。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。