Ollama 鉴权方案实现教程

B站影视 欧美电影 2025-11-17 21:37 1

摘要:Ollama 是一款轻量级本地大模型运行工具,默认情况下没有内置鉴权机制,直接暴露端口存在安全风险(如未授权访问、滥用资源等)。为保护服务安全,需通过额外手段实现访问控制。

Ollama 是一款轻量级本地大模型运行工具,默认情况下没有内置鉴权机制,直接暴露端口存在安全风险(如未授权访问、滥用资源等)。为保护服务安全,需通过额外手段实现访问控制。

通过 Nginx、Traefik 等反向代理工具在请求入口层拦截并验证权限,无需修改 Ollama 源码。

安装 Nginx (以 Ubuntu 为例):sudo apt update && sudo apt install nginx#Ollama配置 Basic Auth 认证 :安装 htpasswd 工具: sudo apt install apache2-utils创建用户密码文件(如用户名 ollama_user ):htpasswd -c /etc/nginx/ollama_auth.db ollama_user# 输入密码并确认配置 Nginx 反向代理 :编辑 /etc/nginx/sites-available/ollama :server {listen 80; # 对外暴露的端口(避免直接使用 Ollama 默认的 11434)server_name localhost;# 开启 Basic Authauth_basic "Ollama Access"; auth_basic_user_file /etc/nginx/ollama_auth.db;# 反向代理到本地 Ollamalocation / { proxy_pass http://127.0.0.1:11434; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }启用配置并重启 Nginx :sudo ln -s /etc/nginx/sites-available/ollama /etc/nginx/sites-enabled/sudo nginx -t # 验证配置sudo systemctl restart nginx

使用 Kong、APISIX 等 API 网关,支持更灵活的鉴权策略(如 Token、JWT、IP 白名单等)。以 APISIX 为例:

部署 APISIX (参考 官方文档 )。创建路由与上游 :上游指向 Ollama 服务( 127.0.0.1:11434 )。路由配置路径为 /api/* ,并启用 JWT 插件:# 通过 APISIX Admin API 配置curl "http://127.0.0.1:9180/apisix/admin/routes/1" -X PUT -d ' { "uri": "/api/*", "upstream": { "type": "roundrobin", "nodes": {"127.0.0.1:11434": 1} }, "plugins": { "jwt-auth": { "key": "your_secret_key", # JWT 密钥"exp": 86400 # 令牌有效期(秒)} } }'生成 JWT 令牌 :使用工具生成包含密钥的令牌(如 jwt.io ),或通过代码生成。验证 :请求时在 Header 中携带令牌:curl -H "Authorization: Bearer " http://APISIX_IP:9080/api/tags

通过修改 Ollama 源码,在 API 层添加鉴权逻辑(需 Go 开发基础)。

克隆源码 :git clone https://github.com/jmorganca/ollama.gitcd ollama添加 Token 验证中间件 :在 api/server.go 中,为路由注册添加鉴权中间件:

运行

// 定义鉴权中间件func authMiddleware(next http.Handler) http.Handler {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {// 从 Header 获取 Tokentoken := r.Header.Get("X-Ollama-Token")if token != "your_secure_token" { // 替换为实际密钥http.Error(w, "Unauthorized", http.StatusUnauthorized)return}next.ServeHTTP(w, r)})}// 在路由注册时应用中间件 func setupRoutes(mux *http.ServeMux) { // 为所有 API 路径添加鉴权 mux.Handle("/api/", authMiddleware(http.StripPrefix("/api", apiRouter))) }编译 Ollama :go build -o ollama ./cmd/ollama启动并验证 :# 只允许特定 IP 访问 11434 端口sudo ufw allow from 192.168.1.100 to any port 11434# 拒绝其他所有 IPsudo ufw deny 11434

根据实际安全需求和技术栈选择合适方案,生产环境建议至少采用两种以上鉴权手段(如反向代理 + 网络控制)。

来源:墨码行者一点号

相关推荐