Gemma-3-12B-IT部署教程:HTTPS反向代理(Nginx)配置保护WebUI访问安全

1. 为什么需要HTTPS保护你的Gemma WebUI?

想象一下,你刚刚在服务器上部署了强大的Gemma-3-12B-IT模型,通过WebUI界面可以轻松对话、生成代码、解答问题。但每次访问时,浏览器地址栏显示的都是http://开头,还带着一个不太美观的端口号7860

这不仅仅是美观问题,更存在几个实际的安全隐患:

1. 数据传输不安全

  • 你与模型的所有对话内容都以明文形式在网络中传输
  • 如果有人监听网络流量,能看到你问的所有问题、模型的所有回答
  • 包括可能涉及的技术细节、代码片段、甚至敏感信息

2. 端口暴露风险

  • 直接使用7860端口,容易被端口扫描工具发现
  • 缺乏访问控制和身份验证机制
  • 如果服务器有漏洞,攻击者可能直接访问你的AI服务

3. 用户体验不佳

  • 浏览器会显示"不安全"警告,影响使用信心
  • 无法使用自定义域名,只能记IP地址和端口
  • 移动设备访问时可能被运营商拦截

4. 专业形象受损

  • 对于企业或团队使用,不安全的访问方式显得不够专业
  • 无法集成到现有系统中,只能独立使用

今天,我就带你一步步解决这些问题。通过配置Nginx反向代理和HTTPS,让你的Gemma WebUI:

  • 拥有安全的https://访问
  • 使用干净的域名(如ai.yourdomain.com
  • 隐藏后端端口,增强安全性
  • 获得更好的用户体验

整个过程不需要复杂的编程知识,跟着做就能完成。我们从一个简单的HTTP服务开始,最终实现安全、专业的HTTPS访问。

2. 准备工作:检查你的Gemma WebUI运行状态

在开始配置之前,我们需要先确认几个关键信息。打开你的服务器终端,执行以下命令:

2.1 确认Gemma服务正常运行

# 查看服务状态
/root/gemma-3-webui/manage.sh status

# 预期输出应该是:
# gemma-webui RUNNING pid 12345, uptime 0:10:30

如果服务没有运行,先启动它:

# 启动Gemma WebUI服务
/root/gemma-3-webui/manage.sh start

# 等待几秒后再次检查状态
/root/gemma-3-webui/manage.sh status

2.2 确认WebUI可以正常访问

在本地电脑的浏览器中,输入你的服务器IP和端口:

http://你的服务器IP:7860

你应该能看到Gemma的聊天界面。如果看不到,可能是防火墙或网络问题,需要先解决基础访问问题。

2.3 记录关键信息

记下以下信息,后面配置时会用到:

  1. 服务器IP地址:比如100.64.127.196
  2. Gemma服务端口:默认是7860
  3. 服务器操作系统:通常是Ubuntu或CentOS
  4. 是否有域名:如果有域名,准备好域名解析到服务器IP

2.4 安装必要的工具

确保服务器上安装了curl和netstat工具:

# Ubuntu/Debian系统
sudo apt update
sudo apt install curl net-tools -y

# CentOS/RHEL系统
sudo yum install curl net-tools -y

2.5 检查端口占用情况

# 查看7860端口是否被Gemma占用
netstat -tlnp | grep 7860

# 预期输出类似:
# tcp6       0      0 :::7860                 :::*                    LISTEN      12345/python

如果7860端口被其他程序占用,你可能需要:

  • 停止占用程序
  • 或者修改Gemma的监听端口(需要修改配置文件)

现在准备工作完成,你的Gemma WebUI应该正常运行在http://服务器IP:7860。接下来我们开始配置Nginx反向代理。

3. 安装和配置Nginx反向代理

Nginx是一个高性能的Web服务器,我们用它作为反向代理,把外部的HTTPS请求转发到内部的Gemma服务。这样用户访问的是安全的HTTPS,而内部通信还是HTTP。

3.1 安装Nginx

根据你的操作系统选择安装命令:

# Ubuntu/Debian系统
sudo apt update
sudo apt install nginx -y

# CentOS/RHEL系统
sudo yum install epel-release -y
sudo yum install nginx -y

安装完成后,启动Nginx并设置开机自启:

# 启动Nginx服务
sudo systemctl start nginx

# 设置开机自启
sudo systemctl enable nginx

# 检查运行状态
sudo systemctl status nginx

如果看到active (running),说明Nginx安装成功。

3.2 测试Nginx默认页面

在浏览器中访问你的服务器IP(不加端口):

http://你的服务器IP

你应该能看到Nginx的欢迎页面。如果看不到,可能是防火墙阻止了80端口:

# 如果是Ubuntu,检查UFW防火墙
sudo ufw status
# 如果80端口没开,执行:
sudo ufw allow 80/tcp
sudo ufw reload

# 如果是CentOS,检查firewalld
sudo firewall-cmd --list-all
# 如果80端口没开,执行:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

3.3 配置Nginx反向代理

现在我们来创建Gemma的Nginx配置文件。Nginx的配置文件通常放在/etc/nginx/sites-available/目录下。

# 创建配置文件
sudo nano /etc/nginx/sites-available/gemma-proxy

将以下配置内容复制到文件中(记得替换your_server_ip为你的实际服务器IP):

server {
    listen 80;
    server_name _;  # 先用IP访问,后面再配置域名
    
    # 访问日志
    access_log /var/log/nginx/gemma_access.log;
    error_log /var/log/nginx/gemma_error.log;
    
    # 反向代理配置
    location / {
        # 代理到Gemma WebUI
        proxy_pass http://127.0.0.1:7860;
        
        # 传递原始客户端信息
        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支持(如果Gemma支持流式输出)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        # 超时设置
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
        
        # 缓冲区设置
        proxy_buffering off;
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;
    }
    
    # 静态文件缓存(如果有的话)
    location /static/ {
        proxy_pass http://127.0.0.1:7860/static/;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

配置说明:

  1. listen 80:监听80端口(HTTP)
  2. server_name _:匹配所有域名,先用IP访问
  3. proxy_pass http://127.0.0.1:7860:将请求转发到本机的7860端口(Gemma服务)
  4. proxy_set_header:传递客户端真实信息给后端
  5. proxy_http_version 1.1和WebSocket相关设置:支持实时流式输出
  6. 超时设置:防止长时间请求超时

3.4 启用配置并测试

# 创建符号链接到sites-enabled目录
sudo ln -s /etc/nginx/sites-available/gemma-proxy /etc/nginx/sites-enabled/

# 测试Nginx配置语法
sudo nginx -t

# 预期输出:
# nginx: configuration file /etc/nginx/nginx.conf test is successful

# 重新加载Nginx配置
sudo systemctl reload nginx

现在测试反向代理是否工作:

  1. 在浏览器中访问:http://你的服务器IP
  2. 你应该能看到Gemma的WebUI界面
  3. 地址栏显示的是http://IP,而不是http://IP:7860

如果看到Gemma界面,恭喜你!反向代理配置成功。如果看不到,检查Nginx错误日志:

# 查看错误日志
sudo tail -f /var/log/nginx/gemma_error.log

# 查看访问日志
sudo tail -f /var/log/nginx/gemma_access.log

常见问题解决:

# 如果提示"502 Bad Gateway"
# 1. 检查Gemma服务是否运行
/root/gemma-3-webui/manage.sh status

# 2. 检查端口是否正确
netstat -tlnp | grep 7860

# 3. 检查Nginx配置中的proxy_pass地址
# 确保是http://127.0.0.1:7860,不是localhost:7860

现在你的Gemma WebUI已经可以通过80端口访问了,但我们还需要HTTPS。接下来申请SSL证书。

4. 申请和配置SSL证书(Let's Encrypt)

HTTPS的核心是SSL证书。我们将使用Let's Encrypt的免费证书,它被所有主流浏览器信任。

4.1 安装Certbot工具

Certbot是Let's Encrypt的官方客户端,可以自动申请和安装证书。

# Ubuntu/Debian系统
sudo apt update
sudo apt install certbot python3-certbot-nginx -y

# CentOS/RHEL系统(需要先启用EPEL)
sudo yum install epel-release -y
sudo yum install certbot python3-certbot-nginx -y

4.2 准备域名(可选但推荐)

如果你有域名,强烈建议使用域名而不是IP访问,因为:

  1. 更专业、更容易记忆
  2. 证书申请更方便
  3. 未来扩展性更好

将域名解析到你的服务器IP:

  • 在域名管理后台添加A记录
  • 比如:ai.yourdomain.com你的服务器IP
  • 等待DNS生效(通常几分钟到几小时)

如果没有域名,也可以用IP申请证书,但体验会差一些。

4.3 申请SSL证书

情况1:有域名

# 使用Certbot自动配置Nginx和SSL
sudo certbot --nginx -d ai.yourdomain.com

# 按照提示操作:
# 1. 输入邮箱(用于证书到期提醒)
# 2. 同意服务条款
# 3. 是否接收邮件(选No)
# 4. 选择重定向HTTP到HTTPS(选2,推荐)

Certbot会自动:

  • 验证域名所有权
  • 申请SSL证书
  • 修改Nginx配置
  • 设置自动续期

情况2:没有域名,只有IP

对于IP地址,Let's Encrypt不支持直接签发证书。但我们可以:

  1. 使用自签名证书(浏览器会显示警告)
  2. 或者使用其他支持IP的证书服务

这里介绍自签名证书的方法:

# 生成自签名证书
sudo mkdir -p /etc/nginx/ssl
cd /etc/nginx/ssl

# 生成私钥
sudo openssl genrsa -out gemma.key 2048

# 生成证书签名请求(CSR)
sudo openssl req -new -key gemma.key -out gemma.csr \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=YourOrg/CN=your-server-ip"

# 生成自签名证书(有效期365天)
sudo openssl x509 -req -days 365 -in gemma.csr -signkey gemma.key -out gemma.crt

# 设置权限
sudo chmod 600 gemma.key
sudo chmod 644 gemma.crt

4.4 修改Nginx配置支持HTTPS

更新之前的Nginx配置文件,添加HTTPS支持:

sudo nano /etc/nginx/sites-available/gemma-proxy

对于有域名的情况(Certbot已自动配置):

Certbot会自动修改配置文件,你可以在文件末尾看到类似内容:

# 以下内容由Certbot自动添加
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/ai.yourdomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/ai.yourdomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

对于自签名证书的情况:

手动修改配置文件,添加HTTPS部分:

server {
    listen 80;
    server_name _;
    
    # 强制重定向到HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name _;
    
    # SSL证书配置
    ssl_certificate /etc/nginx/ssl/gemma.crt;
    ssl_certificate_key /etc/nginx/ssl/gemma.key;
    
    # SSL优化配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    
    # 访问日志
    access_log /var/log/nginx/gemma_ssl_access.log;
    error_log /var/log/nginx/gemma_ssl_error.log;
    
    # 反向代理配置(与之前相同)
    location / {
        proxy_pass http://127.0.0.1:7860;
        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;
        
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
        proxy_buffering off;
    }
}

4.5 测试并应用配置

# 测试Nginx配置
sudo nginx -t

# 重新加载Nginx
sudo systemctl reload nginx

# 检查Nginx状态
sudo systemctl status nginx

现在访问你的Gemma WebUI:

  • 有域名:https://ai.yourdomain.com
  • 只有IP:https://你的服务器IP

注意:如果使用自签名证书,浏览器会显示"不安全"警告,需要手动点击"高级"→"继续前往"。

5. 高级安全配置和优化

基本的HTTPS配置已经完成,但为了更安全、更稳定,我们还需要做一些优化。

5.1 配置HTTP严格传输安全(HSTS)

HSTS告诉浏览器只使用HTTPS访问你的网站,防止降级攻击。

# 在HTTPS server块中添加
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

5.2 配置安全头部

添加一些安全相关的HTTP头部:

# 在location / 块中添加
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

5.3 限制访问频率(防滥用)

防止有人恶意刷你的AI服务:

# 在http块中(/etc/nginx/nginx.conf)
http {
    # 定义限制区域
    limit_req_zone $binary_remote_addr zone=gemma_limit:10m rate=10r/s;
    
    # 在server块中使用
    server {
        location / {
            limit_req zone=gemma_limit burst=20 nodelay;
            # ... 其他配置
        }
    }
}

5.4 配置访问控制(可选)

如果你只想让特定IP访问:

location / {
    # 允许的IP地址
    allow 192.168.1.0/24;
    allow 10.0.0.0/8;
    # 拒绝其他所有
    deny all;
    
    # ... 其他代理配置
}

或者使用HTTP基本认证:

# 创建密码文件
sudo sh -c "echo -n '用户名:' >> /etc/nginx/.htpasswd"
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
# 输入密码两次

# 在Nginx配置中添加
location / {
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.htpasswd;
    
    # ... 其他代理配置
}

5.5 优化性能配置

# 在http块中添加
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;

# 启用gzip压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;

5.6 完整的优化配置示例

这是一个完整的、优化过的Nginx配置示例:

# HTTP重定向到HTTPS
server {
    listen 80;
    server_name ai.yourdomain.com;
    return 301 https://$server_name$request_uri;
}

# HTTPS主配置
server {
    listen 443 ssl http2;
    server_name ai.yourdomain.com;
    
    # SSL证书
    ssl_certificate /etc/letsencrypt/live/ai.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ai.yourdomain.com/privkey.pem;
    
    # SSL优化
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;
    
    # 安全头部
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    
    # 访问控制(按需启用)
    # auth_basic "Restricted Access";
    # auth_basic_user_file /etc/nginx/.htpasswd;
    
    # 访问日志
    access_log /var/log/nginx/gemma_access.log combined;
    error_log /var/log/nginx/gemma_error.log warn;
    
    # 反向代理到Gemma
    location / {
        # 频率限制(按需启用)
        # limit_req zone=gemma_limit burst=20 nodelay;
        
        proxy_pass http://127.0.0.1:7860;
        proxy_http_version 1.1;
        
        # 传递头部
        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;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;
        
        # WebSocket支持
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        # 超时设置
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 300s;  # AI响应可能较慢
        
        # 缓冲区设置
        proxy_buffering off;
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;
        
        # 禁用缓存
        proxy_no_cache 1;
        proxy_cache_bypass 1;
    }
    
    # 静态文件处理(如果有)
    location /static/ {
        proxy_pass http://127.0.0.1:7860/static/;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
    
    # 健康检查端点
    location /health {
        access_log off;
        return 200 "healthy\n";
        add_header Content-Type text/plain;
    }
}

应用配置并测试:

# 测试配置
sudo nginx -t

# 重新加载
sudo systemctl reload nginx

# 测试HTTPS访问
curl -I https://ai.yourdomain.com

6. 测试和验证配置

配置完成后,我们需要全面测试确保一切正常工作。

6.1 基础功能测试

测试1:HTTPS访问

# 使用curl测试HTTPS
curl -I https://ai.yourdomain.com

# 预期输出包含:
# HTTP/2 200
# 或者
# HTTP/1.1 200 OK

测试2:HTTP重定向

# 测试HTTP是否重定向到HTTPS
curl -I http://ai.yourdomain.com

# 预期输出包含:
# HTTP/1.1 301 Moved Permanently
# Location: https://ai.yourdomain.com/

测试3:SSL证书验证

# 检查SSL证书信息
openssl s_client -connect ai.yourdomain.com:443 -servername ai.yourdomain.com < /dev/null 2>/dev/null | openssl x509 -noout -dates

# 输出证书有效期
# notBefore=...  # 开始时间
# notAfter=...   # 过期时间

6.2 安全头部测试

# 检查安全头部
curl -I https://ai.yourdomain.com

# 应该看到的安全头部:
# Strict-Transport-Security: max-age=31536000; includeSubDomains
# X-Frame-Options: SAMEORIGIN
# X-Content-Type-Options: nosniff
# X-XSS-Protection: 1; mode=block

6.3 实际使用测试

在浏览器中访问你的Gemma WebUI:

  1. 直接访问HTTPS地址https://ai.yourdomain.com

    • 应该直接打开,没有警告(使用Let's Encrypt证书)
    • 或者需要点击"继续前往"(使用自签名证书)
  2. 测试HTTP重定向http://ai.yourdomain.com

    • 应该自动跳转到HTTPS版本
  3. 测试Gemma功能

    • 发送一条消息,看是否能正常回复
    • 测试流式输出(如果支持)
    • 测试文件上传(如果支持)
  4. 检查浏览器安全标识

    • 地址栏应该显示锁形图标🔒
    • 点击锁图标,查看证书信息
    • 确认连接是安全的

6.4 性能测试

# 使用ab进行简单压力测试
sudo apt install apache2-utils  # 安装ab工具

# 测试100个请求,10个并发
ab -n 100 -c 10 https://ai.yourdomain.com/

# 关注指标:
# Requests per second:     # 每秒请求数
# Time per request:        # 每个请求时间
# Failed requests:         # 失败请求数(应为0)

6.5 监控日志

实时监控Nginx和Gemma的日志:

# 查看Nginx访问日志
sudo tail -f /var/log/nginx/gemma_access.log

# 查看Nginx错误日志
sudo tail -f /var/log/nginx/gemma_error.log

# 查看Gemma服务日志
/root/gemma-3-webui/manage.sh logs

6.6 常见问题排查

问题1:502 Bad Gateway

# 检查Gemma服务
/root/gemma-3-webui/manage.sh status

# 检查端口
netstat -tlnp | grep 7860

# 检查Nginx错误日志
sudo tail -f /var/log/nginx/gemma_error.log

问题2:SSL证书错误

# 检查证书路径和权限
sudo ls -la /etc/letsencrypt/live/ai.yourdomain.com/

# 重新申请证书(Let's Encrypt)
sudo certbot renew --dry-run

问题3:连接超时

# 增加Nginx超时时间
# 在Nginx配置中:
proxy_connect_timeout 120s;
proxy_send_timeout 120s;
proxy_read_timeout 300s;  # AI响应可能很慢

7. 自动化维护和监控

配置完成后,我们还需要设置一些自动化任务,确保服务长期稳定运行。

7.1 SSL证书自动续期

Let's Encrypt证书只有90天有效期,需要自动续期:

# 测试续期(不实际执行)
sudo certbot renew --dry-run

# 如果测试成功,设置自动续期
# Certbot已经自动创建了定时任务,检查一下:
sudo systemctl list-timers | grep certbot

# 或者查看cron任务
sudo crontab -l | grep certbot

手动续期命令:

# 手动续期所有证书
sudo certbot renew

# 续期后重新加载Nginx
sudo systemctl reload nginx

7.2 监控服务状态

创建监控脚本,定期检查服务状态:

# 创建监控脚本
sudo nano /usr/local/bin/check-gemma-service.sh

脚本内容:

#!/bin/bash

# 检查Gemma服务
GEMMA_STATUS=$(/root/gemma-3-webui/manage.sh status | grep -c "RUNNING")

# 检查Nginx服务
NGINX_STATUS=$(systemctl is-active nginx)

# 检查端口
PORT_STATUS=$(netstat -tlnp | grep -c ":7860 ")

# 检查HTTPS访问
HTTPS_STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://ai.yourdomain.com/health)

# 发送告警(如果有问题)
if [ $GEMMA_STATUS -eq 0 ] || [ "$NGINX_STATUS" != "active" ] || [ $PORT_STATUS -eq 0 ] || [ "$HTTPS_STATUS" != "200" ]; then
    echo "服务异常告警:"
    echo "Gemma状态: $GEMMA_STATUS"
    echo "Nginx状态: $NGINX_STATUS"
    echo "端口状态: $PORT_STATUS"
    echo "HTTPS状态: $HTTPS_STATUS"
    echo "时间: $(date)"
    
    # 这里可以添加邮件、微信、钉钉等告警
    # 比如:curl -X POST "告警接口URL" -d "内容"
fi

设置执行权限和定时任务:

# 设置执行权限
sudo chmod +x /usr/local/bin/check-gemma-service.sh

# 添加到crontab,每5分钟检查一次
sudo crontab -l > /tmp/cron.bak
echo "*/5 * * * * /usr/local/bin/check-gemma-service.sh >> /var/log/gemma-monitor.log 2>&1" >> /tmp/cron.bak
sudo crontab /tmp/cron.bak
rm /tmp/cron.bak

7.3 日志轮转配置

防止日志文件过大:

# 创建Nginx日志轮转配置
sudo nano /etc/logrotate.d/nginx-gemma

内容:

/var/log/nginx/gemma_*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

7.4 备份配置

定期备份Nginx和证书配置:

# 创建备份脚本
sudo nano /usr/local/bin/backup-gemma-config.sh

内容:

#!/bin/bash

BACKUP_DIR="/backup/gemma-config"
DATE=$(date +%Y%m%d)

# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE

# 备份Nginx配置
cp -r /etc/nginx/sites-available/ $BACKUP_DIR/$DATE/
cp -r /etc/nginx/sites-enabled/ $BACKUP_DIR/$DATE/
cp /etc/nginx/nginx.conf $BACKUP_DIR/$DATE/

# 备份SSL证书(如果有)
if [ -d "/etc/letsencrypt" ]; then
    cp -r /etc/letsencrypt/ $BACKUP_DIR/$DATE/
fi

# 备份自签名证书(如果有)
if [ -d "/etc/nginx/ssl" ]; then
    cp -r /etc/nginx/ssl/ $BACKUP_DIR/$DATE/
fi

# 备份Gemma管理脚本
cp /root/gemma-3-webui/manage.sh $BACKUP_DIR/$DATE/

# 压缩备份
cd $BACKUP_DIR
tar -czf gemma-config-$DATE.tar.gz $DATE/

# 删除30天前的备份
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

echo "备份完成:$BACKUP_DIR/gemma-config-$DATE.tar.gz"

设置定时备份:

# 设置执行权限
sudo chmod +x /usr/local/bin/backup-gemma-config.sh

# 每天凌晨2点备份
sudo crontab -l > /tmp/cron.bak
echo "0 2 * * * /usr/local/bin/backup-gemma-config.sh >> /var/log/gemma-backup.log 2>&1" >> /tmp/cron.bak
sudo crontab /tmp/cron.bak

8. 总结

通过本教程,我们成功为Gemma-3-12B-IT的WebUI配置了HTTPS反向代理。让我们回顾一下完成的工作:

8.1 实现的安全提升

  1. 数据传输加密:所有通信都通过HTTPS加密,防止中间人攻击
  2. 端口隐藏:后端7860端口不再对外暴露,只通过Nginx代理访问
  3. 访问控制:可以方便地添加IP白名单、HTTP认证等控制
  4. 安全头部:添加了HSTS、X-Frame-Options等安全防护
  5. 频率限制:防止恶意刷接口,保护服务稳定

8.2 获得的用户体验改善

  1. 专业域名访问:使用https://ai.yourdomain.com而不是http://IP:7860
  2. 浏览器信任:地址栏显示锁形图标,提升用户信任度
  3. 自动重定向:HTTP自动跳转HTTPS,无需用户手动输入
  4. 更好的兼容性:某些网络环境会拦截非标准端口,HTTPS+80/443端口最通用
  5. 移动端友好:在手机浏览器上访问更顺畅

8.3 配置要点回顾

  1. Nginx安装配置:作为反向代理,转发请求到Gemma服务
  2. SSL证书申请:使用Let's Encrypt免费证书或自签名证书
  3. 安全优化:添加安全头部、配置HSTS、设置访问控制
  4. 性能调优:调整超时时间、缓冲区大小,支持WebSocket
  5. 自动化维护:证书自动续期、服务监控、配置备份

8.4 后续维护建议

  1. 定期检查证书:Let's Encrypt证书90天有效期,确保自动续期正常工作
  2. 监控服务状态:使用我们创建的监控脚本,及时发现并解决问题
  3. 关注安全更新:定期更新Nginx和系统安全补丁
  4. 备份配置:修改配置前做好备份,防止配置丢失
  5. 性能监控:关注服务器资源使用情况,适时升级配置

8.5 故障排除快速指南

遇到问题时,按顺序检查:

  1. 检查服务状态

    /root/gemma-3-webui/manage.sh status
    sudo systemctl status nginx
    
  2. 检查端口监听

    netstat -tlnp | grep -E "(7860|80|443)"
    
  3. 检查日志

    sudo tail -f /var/log/nginx/gemma_error.log
    /root/gemma-3-webui/manage.sh logs
    
  4. 测试连接

    curl -I http://localhost:7860
    curl -I https://ai.yourdomain.com
    
  5. 检查证书

    sudo certbot certificates
    sudo openssl x509 -in /path/to/cert.pem -text -noout
    

8.6 扩展可能性

配置完成后,你还可以考虑:

  1. 负载均衡:如果流量大,可以在多台服务器部署Gemma,用Nginx做负载均衡
  2. CDN加速:静态资源通过CDN加速,提升访问速度
  3. WAF防护:添加Web应用防火墙,增强安全防护
  4. 访问分析:配置更详细的访问日志分析,了解使用情况
  5. 多域名支持:一个Nginx服务多个AI应用

现在,你的Gemma-3-12B-IT WebUI已经从一个简单的HTTP服务,升级为安全、专业、易用的HTTPS服务。不仅保护了你的数据安全,也提升了用户体验和专业形象。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐