Ubuntu Server生产环境部署:Nginx反向代理保护你的Ollama API服务

云信安装大师
90
AI 质量分
11 5 月, 2025
2 分钟阅读
0 阅读

Ubuntu Server生产环境部署:Nginx反向代理保护你的Ollama API服务

引言

在AI应用开发中,Ollama作为本地运行大型语言模型的工具越来越受欢迎。但在生产环境中直接暴露Ollama API会带来安全隐患。本文将教你如何使用Nginx作为反向代理来保护Ollama API服务,同时提高系统的可靠性和安全性。

准备工作

环境要求

  • Ubuntu Server 22.04 LTS (推荐)
  • 已安装的Ollama服务(默认运行在11434端口)
  • sudo权限的用户账户
  • 基础命令行操作知识

前置知识

  • 基本的Linux命令操作
  • 对HTTP协议有基本了解
  • 简单的网络概念(端口、IP等)

第一步:安装Nginx

代码片段
# 更新软件包列表
sudo apt update

# 安装Nginx
sudo apt install nginx -y

# 启动Nginx并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx

验证安装
访问服务器IP地址,应该能看到Nginx欢迎页面。

注意事项
– 如果遇到端口冲突,检查是否有其他服务占用了80端口
– Ubuntu默认使用ufw防火墙,确保放行HTTP(80)和HTTPS(443)端口

第二步:配置Nginx作为反向代理

创建配置文件

代码片段
# 为Ollama创建专用配置文件
sudo nano /etc/nginx/sites-available/ollama-proxy

将以下配置粘贴到文件中:

代码片段
server {
    listen 80;
    server_name your-domain.com; # 替换为你的域名或服务器IP

    location / {
        proxy_pass http://localhost:11434;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket支持(如果Ollama使用WebSocket)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 客户端最大body大小(调整根据需求)
        client_max_body_size 100M;
    }

    # 限制请求速率防止滥用(可选)
    limit_req_zone $binary_remote_addr zone=ollamalimit:10m rate=5r/s;

    access_log /var/log/nginx/ollama_access.log;
    error_log /var/log/nginx/ollama_error.log;
}

配置说明
1. proxy_pass:将所有请求转发到本地的Ollama服务(11434端口)
2. proxy_set_header:传递必要的头部信息给后端服务
3. WebSocket部分:确保WebSocket连接能正常工作(如果API使用)
4. client_max_body_size:调整上传文件大小限制

启用配置

代码片段
# 创建符号链接启用站点配置
sudo ln -s /etc/nginx/sites-available/ollama-proxy /etc/nginx/sites-enabled/

# 测试Nginx配置是否正确
sudo nginx -t

# 重启Nginx使配置生效
sudo systemctl restart nginx

第三步:安全加固(推荐)

HTTPS加密(使用Let’s Encrypt)

代码片段
# 安装Certbot工具和Nginx插件
sudo apt install certbot python3-certbot-nginx -y

# 获取并安装SSL证书(需要有已解析的域名)
sudo certbot --nginx -d your-domain.com

# Certbot会自动修改你的Nginx配置并设置自动续期

IP访问限制(可选)

编辑之前的配置文件,在server块内添加:

代码片段
location / {
    # ...原有配置...

    # IP白名单示例(替换为你允许的IP)
    allow xxx.xxx.xxx.xxx; 
    deny all;
}

API密钥验证(高级安全)

代码片段
# 生成htpasswd文件用于基本认证(需要apache2-utils)
sudo apt install apache2-utils -y
sudo htpasswd -c /etc/nginx/.ollama-auth api-user

#然后在Nginx配置中添加:
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.ollama-auth; 

第四步:测试与验证

  1. 测试API访问

    代码片段
    curl http://your-domain.com/api/generate -d '{"model": "llama2", "prompt": "Hello"}'
    
  2. 检查日志

    代码片段
    sudo tail -f /var/log/nginx/ollama_access.log /var/log/nginx/ollama_error.log 
    
  3. 性能测试(可选):

    代码片段
    ab -n1000 -c10 http://your-domain.com/api/generate 
    

常见问题解决

Q1: Nginx报错502 Bad Gateway怎么办?

A:
1. 检查Ollama服务是否正常运行:systemctl status ollama
2. Ollama是否监听11434端口:netstat -tulnp | grep ollama
3. SELinux或AppArmor可能阻止了连接,检查相关日志

Q2: WebSocket连接失败怎么处理?

A:
1. Nginx必须正确配置WebSocket代理头(如教程所示)
2. Ollama客户端也需要指定正确的WebSocket URL格式

Q3: HTTPS证书不生效?

A:
1. Certbot需要域名正确解析到服务器IP
2. ufw防火墙需要放行443端口
3. Nginx必须监听443端口

Nginx优化建议

  1. 性能调优
    “`nginx

    worker进程数设置为CPU核心数

    worker_processes auto;

    Keepalive连接设置

    keepalivetimeout 65;
    keepalive
    requests 1000;

    Buffer大小优化

    clientbodybuffersize 10K;
    client
    headerbuffersize 1k;
    clientmaxbodysize 8m;
    large
    clientheaderbuffers 4 8k;

    Gzip压缩

    gzip on;
    gzipminlength 1000;
    gzipproxied expired no-cache no-store private auth;
    gzip
    types text/plain application/json;

    TLS优化

    sslprotocols TLSv1.2 TLSv1.3;
    ssl
    preferserverciphers on;
    sslciphers ‘EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH’;
    ssl
    sessioncache shared:SSL:10m;
    ssl
    session_timeout 10m;

“`

总结

通过本文的步骤,你已经成功:

✅使用Nginx作为反向代理保护Ollama API
✅实现了HTTPS加密传输
✅设置了基础的安全防护措施
✅学会了基本的性能调优方法

这种架构的好处是:

🔹隐藏了后端服务的真实端口和细节
🔹可以轻松添加负载均衡和多实例部署
🔹便于后续添加WAF、限流等安全功能

后续可以考虑:

🔸添加更精细的API路由控制
🔸实现基于JWT的认证授权系统
🔸结合Prometheus监控API调用情况

原创 高质量