Gemma-3-12B-IT部署教程:HTTPS反向代理(Nginx)配置保护WebUI访问安全
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 记录关键信息
记下以下信息,后面配置时会用到:
- 服务器IP地址:比如
100.64.127.196 - Gemma服务端口:默认是
7860 - 服务器操作系统:通常是Ubuntu或CentOS
- 是否有域名:如果有域名,准备好域名解析到服务器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";
}
}
配置说明:
listen 80:监听80端口(HTTP)server_name _:匹配所有域名,先用IP访问proxy_pass http://127.0.0.1:7860:将请求转发到本机的7860端口(Gemma服务)proxy_set_header:传递客户端真实信息给后端proxy_http_version 1.1和WebSocket相关设置:支持实时流式输出- 超时设置:防止长时间请求超时
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
现在测试反向代理是否工作:
- 在浏览器中访问:
http://你的服务器IP - 你应该能看到Gemma的WebUI界面
- 地址栏显示的是
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访问,因为:
- 更专业、更容易记忆
- 证书申请更方便
- 未来扩展性更好
将域名解析到你的服务器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不支持直接签发证书。但我们可以:
- 使用自签名证书(浏览器会显示警告)
- 或者使用其他支持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:
-
直接访问HTTPS地址:
https://ai.yourdomain.com- 应该直接打开,没有警告(使用Let's Encrypt证书)
- 或者需要点击"继续前往"(使用自签名证书)
-
测试HTTP重定向:
http://ai.yourdomain.com- 应该自动跳转到HTTPS版本
-
测试Gemma功能:
- 发送一条消息,看是否能正常回复
- 测试流式输出(如果支持)
- 测试文件上传(如果支持)
-
检查浏览器安全标识:
- 地址栏应该显示锁形图标🔒
- 点击锁图标,查看证书信息
- 确认连接是安全的
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 实现的安全提升
- 数据传输加密:所有通信都通过HTTPS加密,防止中间人攻击
- 端口隐藏:后端7860端口不再对外暴露,只通过Nginx代理访问
- 访问控制:可以方便地添加IP白名单、HTTP认证等控制
- 安全头部:添加了HSTS、X-Frame-Options等安全防护
- 频率限制:防止恶意刷接口,保护服务稳定
8.2 获得的用户体验改善
- 专业域名访问:使用
https://ai.yourdomain.com而不是http://IP:7860 - 浏览器信任:地址栏显示锁形图标,提升用户信任度
- 自动重定向:HTTP自动跳转HTTPS,无需用户手动输入
- 更好的兼容性:某些网络环境会拦截非标准端口,HTTPS+80/443端口最通用
- 移动端友好:在手机浏览器上访问更顺畅
8.3 配置要点回顾
- Nginx安装配置:作为反向代理,转发请求到Gemma服务
- SSL证书申请:使用Let's Encrypt免费证书或自签名证书
- 安全优化:添加安全头部、配置HSTS、设置访问控制
- 性能调优:调整超时时间、缓冲区大小,支持WebSocket
- 自动化维护:证书自动续期、服务监控、配置备份
8.4 后续维护建议
- 定期检查证书:Let's Encrypt证书90天有效期,确保自动续期正常工作
- 监控服务状态:使用我们创建的监控脚本,及时发现并解决问题
- 关注安全更新:定期更新Nginx和系统安全补丁
- 备份配置:修改配置前做好备份,防止配置丢失
- 性能监控:关注服务器资源使用情况,适时升级配置
8.5 故障排除快速指南
遇到问题时,按顺序检查:
-
检查服务状态
/root/gemma-3-webui/manage.sh status sudo systemctl status nginx -
检查端口监听
netstat -tlnp | grep -E "(7860|80|443)" -
检查日志
sudo tail -f /var/log/nginx/gemma_error.log /root/gemma-3-webui/manage.sh logs -
测试连接
curl -I http://localhost:7860 curl -I https://ai.yourdomain.com -
检查证书
sudo certbot certificates sudo openssl x509 -in /path/to/cert.pem -text -noout
8.6 扩展可能性
配置完成后,你还可以考虑:
- 负载均衡:如果流量大,可以在多台服务器部署Gemma,用Nginx做负载均衡
- CDN加速:静态资源通过CDN加速,提升访问速度
- WAF防护:添加Web应用防火墙,增强安全防护
- 访问分析:配置更详细的访问日志分析,了解使用情况
- 多域名支持:一个Nginx服务多个AI应用
现在,你的Gemma-3-12B-IT WebUI已经从一个简单的HTTP服务,升级为安全、专业、易用的HTTPS服务。不仅保护了你的数据安全,也提升了用户体验和专业形象。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐




所有评论(0)