在阿里云上部署 Ollama 时,最稳妥的方式是让 Ollama 仅监听本地地址,通过 Nginx 反向代理暴露 80 或 443 端口,并在安全组中封禁 11434 端口的公网访问。
先说结论:单纯配置 Nginx 并不能从网络层面隐藏端口,必须配合阿里云安全组规则才能实现公网不可达。
- 适合:希望通过域名对外提供 AI 接口,且不希望暴露后端服务端口的场景
- 先准备:已安装的 Ollama 服务、配置好的 Nginx 环境、阿里云控制台访问权限
- 验收:公网环境下无法直接连通 11434 端口,但可以通过域名正常访问服务
命令速用版
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:11434;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}以上配置需放入 Nginx 的 sites-enabled 目录,并在阿里云安全组中仅放行 80/443 端口,移除 11434 的公网入方向规则。
为什么会这样
Ollama 默认监听本地 11434 端口,公开资料中没有看到可靠的量化数据表明直接暴露该端口会立即导致被攻击,但开放大模型接口意味着消耗计算资源和潜在的数据泄露风险。Nginx 的作用是提供统一的入口和 TLS 加密,而真正的“隐藏”是靠云厂商的安全组防火墙实现的,它决定了公网流量能否触达服务器的特定端口。
分步处理
1. 确认 Ollama 监听地址
默认情况下 Ollama 仅监听 127.0.0.1。使用命令 netstat -tlnp | grep 11434 检查,确保显示的是 127.0.0.1:11434 而不是 0.0.0.0:11434。如果是后者,需设置环境变量 OLLAMA_HOST=127.0.0.1 重启服务。
2. 配置 Nginx 反向代理
在 /etc/nginx/conf.d/ 下新建配置文件,填入速用版中的配置内容。注意若需 HTTPS,需配置 SSL 证书路径并监听 443 端口。
3. 配置阿里云安全组
登录阿里云控制台,找到实例对应的安全组。在入方向规则中,确保只允许 80 和 443 端口对 0.0.0.0/0 开放。检查是否存在允许 11434 端口对 0.0.0.0/0 开放的规则,若有则删除或修改源 IP 为 127.0.0.1。
4. 重启服务
执行 nginx -t 检查配置语法,无误后执行 systemctl reload nginx。
怎么验证是否生效
本地验证:在服务器内部执行 curl http://127.0.0.1:11434 应返回 Ollama 版本信息。
公网验证:在本地电脑(非服务器)执行 curl http://你的公网 IP:11434,连接应超时或被拒绝。
代理验证:在本地电脑执行 curl https://你的域名,应能正常返回服务响应。
常见坑
1. 安全组规则未生效:修改安全组后通常立即生效,但需确认规则优先级,避免有高优先级的允许规则覆盖了禁止规则。
2. CORS 跨域问题:如果通过浏览器前端调用 Ollama 接口,可能需要在 Nginx 配置中添加 add_header Access-Control-Allow-Origin * 等跨域头,具体需参考前端框架要求。
3. WebSocket 支持:部分 Ollama 前端界面可能依赖 WebSocket,若遇到连接断开,需在 Nginx 中配置 proxy_http_version 1.1 和 proxy_set_header Upgrade $http_upgrade。
参考来源
- Ollama GitHub Repository, README.md, https://github.com/ollama/ollama
- Nginx Official Documentation, Example configuration, https://nginx.org/en/docs/
- 阿里云帮助中心,安全组配置指南,https://help.aliyun.com/product/25477.html