1. 环境准备与基础配置
在Windows Server 2019上部署AI服务网关,首先需要搭建好基础运行环境。我实测下来最稳定的组合是Ollama 0.1.20版本搭配Qwen:4b模型,这个配置对硬件要求相对友好,16GB内存的服务器就能流畅运行。
1.1 安装Ollama服务端
直接从官网下载Windows版本的Ollama安装包,建议选择稳定版而非最新测试版。安装过程中有个关键细节:默认安装路径会带空格(Program Files),这在后续调用时容易出问题。我的经验是手动指定安装目录为C:\Ollama这样的无空格路径。
安装完成后,打开cmd验证是否成功:
ollama --version如果返回版本号说明安装正确。这里有个常见坑点:某些安全软件会拦截ollama.exe的网络请求,记得在防火墙中添加白名单。
1.2 配置系统环境变量
为了让服务稳定运行,需要设置两个关键环境变量:
- OLLAMA_MODELS:指向模型存储目录(例如C:\Ollama\models)
- OLLAMA_HOST:指定服务监听地址(0.0.0.0:11434)
配置方法:
setx OLLAMA_MODELS "C:\Ollama\models" /M setx OLLAMA_HOST "0.0.0.0:11434" /M设置完成后必须重启服务器才能生效。我遇到过三次因为没重启导致配置不生效的情况,这点要特别注意。
1.3 下载Qwen:4b模型
在已配置好环境变量的前提下,运行:
ollama pull qwen:4b这个4b参数的模型约占用8GB磁盘空间,下载速度取决于网络环境。有个加速技巧:可以先在Linux机器上用aria2多线程下载,再迁移到Windows服务器。实测下载时间能从2小时缩短到20分钟。
2. 服务启动与验证
2.1 启动Ollama服务
以管理员身份运行CMD,执行:
ollama serve成功启动后会看到类似输出:
INFO[0000] Listening on [::]:11434此时服务已在后台运行。建议用以下命令测试模型是否加载成功:
ollama run qwen:4b "你好"如果返回中文应答,说明模型运转正常。
2.2 配置后台服务
为了让服务在服务器重启后自动运行,需要创建计划任务:
- 打开"任务计划程序"
- 创建基本任务,触发器设为"计算机启动时"
- 操作选择"启动程序",路径填写ollama.exe的完整路径
- 在参数栏填写"serve"
我习惯额外添加一个每日重启任务,这样可以定期释放内存。具体做法是在"触发器"中添加每天凌晨3点的执行计划。
3. Nginx反向代理配置
3.1 安装Nginx 1.27
推荐使用官方Mainline版本,解压到C:\nginx-1.27.0目录。测试启动:
cd C:\nginx-1.27.0 start nginx访问http://localhost应能看到欢迎页面。
3.2 关键配置修改
修改conf/nginx.conf,在http块内添加:
server { listen 80; server_name your_server_ip; location /api/ { proxy_pass http://127.0.0.1:11434; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }这里有个性能优化点:在http块顶部添加
worker_processes auto; events { worker_connections 1024; use epoll; }可以显著提升并发处理能力。
3.3 安全加固配置
建议添加以下安全措施:
- 限制访问IP:
allow 192.168.1.0/24; deny all;- 启用HTTPS(需要准备SSL证书):
listen 443 ssl; ssl_certificate server.crt; ssl_certificate_key server.key;- 添加基础认证:
auth_basic "Restricted"; auth_basic_user_file conf/htpasswd;4. 系统优化与监控
4.1 性能调优参数
在Ollama启动参数中添加:
set OLLAMA_NUM_PARALLEL=4 set OLLAMA_MAX_LOADED_MODELS=2这可以控制并行请求数和内存占用。对于4核8G的服务器,建议保持这个配置。
4.2 资源监控方案
推荐使用Windows自带的性能监视器,添加以下计数器:
- Process(ollama)% Processor Time
- Process(ollama)\Working Set
- Memory\Available MBytes
可以设置阈值告警,当内存使用超过80%时自动重启服务。
4.3 日志管理技巧
修改nginx.conf中的日志格式:
log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" $request_time'; access_log logs/access.log main buffer=32k flush=5m;这样会记录更详细的访问信息,且采用缓冲写入减少磁盘IO压力。
5. 常见问题排查
5.1 服务无法启动
先检查端口冲突:
netstat -ano | findstr 11434如果端口被占用,可以修改OLLAMA_HOST变量换用其他端口。
5.2 模型加载失败
查看ollama日志:
type C:\Users\%USERNAME%\.ollama\logs\ollama.log常见错误是磁盘空间不足或模型文件损坏,重新pull模型即可。
5.3 Nginx 502错误
在nginx配置中添加:
proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s;这是因为大模型响应时间较长,需要调整超时阈值。
6. 进阶应用场景
6.1 多模型切换方案
通过nginx的location规则实现:
location /api/qwen { proxy_pass http://127.0.0.1:11434/api/generate; proxy_set_header Model qwen:4b; } location /api/llama { proxy_pass http://127.0.0.1:11434/api/generate; proxy_set_header Model llama2; }这样客户端可以通过不同路径访问不同模型。
6.2 负载均衡配置
当单机性能不足时,可以部署多台Ollama实例,在nginx中配置:
upstream ollama_cluster { server 192.168.1.101:11434; server 192.168.1.102:11434; server 192.168.1.103:11434; } location /api/ { proxy_pass http://ollama_cluster; }配合健康检查机制,可以实现高可用架构。
6.3 请求限流策略
防止API被滥用:
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s; location /api/ { limit_req zone=api_limit burst=10 nodelay; proxy_pass http://127.0.0.1:11434; }这会限制每个IP每秒最多5个请求。