如果 Ollama 服务需要暴露给局域网或公网,最稳妥的做法是通过 Nginx 或 Caddy 反向代理层添加 Basic Auth 认证,仅在完全本地单机使用且网络隔离可信时才依赖默认配置。
先说结论:Ollama 默认无身份认证,直接暴露端口存在未授权访问风险,生产环境必须加代理层做访问控制。
- 先判断:确认服务是否仅本机访问,若需局域网共享则必须加固。
- 优先做:使用 Nginx 反向代理并配置 HTTP Basic Auth 隐藏真实端口。
- 再验证:通过 curl 不带认证头访问接口,确认返回 401 状态码。
命令速用版
生成密码文件并配置 Nginx 核心片段:
htpasswd -cb /etc/nginx/.passwd ollama_user your_password
location / {
proxy_pass http://127.0.0.1:11434;
auth_basic "Ollama Access";
auth_basic_user_file /etc/nginx/.passwd;
}为什么会这样
Ollama 设计初衷是简化本地部署,默认启动时不开启身份验证机制,也不校验请求来源。这意味着一旦 11434 端口被映射到局域网或公网,任何知道地址的人都能调用模型推理、列出甚至删除模型。现代开发环境中,WSL2、Docker 桥接模式或 IDE 远程转发都可能让原本绑定的 localhost 被外部触达,单纯依赖防火墙或默认绑定并不足够安全。
分步处理
1. 安装并准备 Nginx
确保服务器已安装 Nginx。若未安装,使用包管理器安装即可。
2. 生成认证密码文件
使用 apache2-utils 提供的工具生成加密密码文件,避免明文存储:
htpasswd -cb /etc/nginx/.passwd ollama_user your_secure_password
3. 配置反向代理
在 Nginx 配置文件中添加 server 块,监听外部端口(如 8080),转发至本地 11434:
server {
listen 8080;
location / {
proxy_pass http://127.0.0.1:11434;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.passwd;
}
}4. 限制 Ollama 监听地址
编辑 Ollama 服务配置,确保它只监听本地回环地址,不直接对外:
Environment="OLLAMA_HOST=127.0.0.1:11434"
修改后重载 systemd 并重启 Ollama 服务。
怎么验证是否生效
使用 curl 命令测试接口访问权限。不带认证信息访问代理端口应被拒绝:
curl -i http://your_server_ip:8080/api/tags
预期返回 HTTP 401 Unauthorized。带上认证信息则应正常返回模型列表:
curl -u ollama_user:your_password http://your_server_ip:8080/api/tags
同时检查 Ollama 日志,确认请求是通过代理转发的。
常见坑
1. Docker 网络穿透
若 Ollama 运行在 Docker 中,确保容器网络模式不是 host,且端口映射仅绑定 127.0.0.1。
2. WSL2 本地回环
在 WSL2 环境中,localhost 可能被 Windows 主机直接访问,需在 Windows 防火墙额外限制。
3. 配置文件权限
密码文件权限应设置为仅 Nginx 用户可读,避免泄露。
参考来源
- CSDN 问答:Ollama 默认开启 API 服务且无认证,如何防止未授权访问?
- 技术教程:Ollama 离线安装后,如何用 Nginx 反向代理+Basic Auth 给你的 AI 模型接口加把‘锁’?
- 安全提示:关于使用 Ollama 工具部署大模型存在未授权访问的风险提示
- 部署指南:如何为 Ollama 添加身份认证,避免“裸奔”带来的安全隐患