GLM-OCR部署教程:HTTPS反向代理配置(Nginx),支持域名+SSL安全访问
GLM-OCR部署教程:HTTPS反向代理配置(Nginx),支持域名+SSL安全访问
1. 为什么需要HTTPS反向代理?
当你成功部署了GLM-OCR服务,通过 http://localhost:7860 访问时,可能会遇到几个实际问题:
- 只能在服务器本地访问:其他设备无法通过IP地址直接访问
- 没有域名:只能记IP地址和端口,不方便分享和使用
- 不安全:HTTP协议传输数据是明文的,存在安全风险
- 端口暴露:直接暴露7860端口给公网,容易被扫描攻击
这就是为什么我们需要配置Nginx反向代理。简单来说,反向代理就像是一个"智能门卫":
- 对外提供统一的访问入口(你的域名)
- 使用HTTPS加密传输数据
- 隐藏后端服务的真实端口
- 还能做负载均衡和缓存
今天我就带你一步步配置Nginx反向代理,让GLM-OCR服务可以通过 https://your-domain.com 这样的安全地址访问。
2. 准备工作:确保GLM-OCR服务正常运行
在开始配置Nginx之前,先确认你的GLM-OCR服务已经正常启动。
2.1 检查服务状态
打开终端,执行以下命令:
# 进入项目目录
cd /root/GLM-OCR
# 启动GLM-OCR服务(如果还没启动的话)
./start_vllm.sh
# 检查服务是否在运行
curl http://localhost:7860
如果看到类似下面的输出,说明服务正常:
{"status": "running", "message": "GLM-OCR service is ready"}
2.2 确认端口监听
# 查看7860端口是否被监听
netstat -tlnp | grep 7860
# 或者用lsof命令
lsof -i :7860
你应该能看到类似这样的输出:
tcp6 0 0 :::7860 :::* LISTEN 12345/python
记下这个进程ID(上面的12345),后面如果需要重启服务会用到。
3. 安装和配置Nginx
3.1 安装Nginx
如果你的服务器还没有安装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并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
安装完成后,访问你的服务器IP地址,应该能看到Nginx的欢迎页面。
3.2 配置反向代理
现在我们来创建GLM-OCR的Nginx配置文件:
# 创建配置文件
sudo nano /etc/nginx/sites-available/glm-ocr
如果你用的是CentOS,路径可能是 /etc/nginx/conf.d/glm-ocr.conf。
将以下配置粘贴进去:
server {
listen 80;
server_name your-domain.com; # 替换为你的域名
# 重定向所有HTTP请求到HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com; # 替换为你的域名
# SSL证书路径(稍后会生成)
ssl_certificate /etc/nginx/ssl/your-domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/your-domain.com.key;
# SSL优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;
# 反向代理配置
location / {
proxy_pass http://localhost: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支持(如果GLM-OCR需要)
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;
}
# 静态文件缓存(可选)
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# 访问日志
access_log /var/log/nginx/glm-ocr-access.log;
error_log /var/log/nginx/glm-ocr-error.log;
}
重要提示:记得把 your-domain.com 替换成你实际的域名。
3.3 启用配置并测试
# 创建符号链接(Ubuntu/Debian)
sudo ln -s /etc/nginx/sites-available/glm-ocr /etc/nginx/sites-enabled/
# 测试Nginx配置语法
sudo nginx -t
# 如果看到"successful"字样,重启Nginx
sudo systemctl reload nginx
现在,你应该可以通过 http://your-domain.com 访问GLM-OCR了(会自动跳转到HTTPS,但证书还没配置,浏览器会显示不安全)。
4. 配置SSL证书(HTTPS加密)
要让网站显示"安全"的小锁图标,我们需要SSL证书。这里介绍两种获取证书的方法。
4.1 方法一:使用Let's Encrypt免费证书(推荐)
Let's Encrypt提供免费的SSL证书,自动续期,非常适合个人项目。
# 安装Certbot(证书管理工具)
# Ubuntu/Debian
sudo apt install certbot python3-certbot-nginx -y
# CentOS/RHEL
sudo yum install certbot python3-certbot-nginx -y
# 获取并安装证书
sudo certbot --nginx -d your-domain.com
# 按照提示操作:
# 1. 输入邮箱(用于证书到期提醒)
# 2. 同意服务条款
# 3. 选择是否接收邮件通知(建议选No)
# 4. 选择是否重定向HTTP到HTTPS(建议选2,强制HTTPS)
Certbot会自动修改Nginx配置,你不需要手动修改SSL证书路径了。
4.2 方法二:自签名证书(仅用于测试)
如果你只是想在本地测试,或者还没有域名,可以用自签名证书:
# 创建SSL证书目录
sudo mkdir -p /etc/nginx/ssl
# 生成自签名证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/your-domain.com.key \
-out /etc/nginx/ssl/your-domain.com.crt \
-subj "/C=CN/ST=Beijing/L=Beijing/O=Test/CN=your-domain.com"
# 设置正确的权限
sudo chmod 600 /etc/nginx/ssl/*
然后需要手动修改Nginx配置,使用这些证书路径。
4.3 验证SSL配置
配置完成后,检查一下:
# 重启Nginx使配置生效
sudo systemctl reload nginx
# 测试SSL连接
curl -I https://your-domain.com
如果使用Let's Encrypt,证书会自动续期。你可以手动测试续期:
# 测试续期(不实际更新)
sudo certbot renew --dry-run
# 查看证书信息
sudo certbot certificates
5. 高级配置和优化
基本的反向代理配置完成后,我们还可以做一些优化。
5.1 增加安全头部
在Nginx配置的 server 块中添加:
# 安全头部
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 "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
5.2 配置访问限制
如果你只想让特定IP访问:
location / {
# 只允许特定IP访问
allow 192.168.1.0/24; # 内网IP段
allow 203.0.113.1; # 特定公网IP
deny all; # 拒绝其他所有
proxy_pass http://localhost:7860;
# ... 其他proxy设置
}
或者设置基础认证:
# 创建密码文件
sudo sh -c "echo -n 'username:' >> /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;
proxy_pass http://localhost:7860;
# ... 其他proxy设置
}
5.3 优化性能参数
GLM-OCR处理图片可能需要较长时间,调整超时设置:
location / {
proxy_pass http://localhost:7860;
# 增加超时时间
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
# 缓冲区设置
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_busy_buffers_size 8k;
# 关闭代理缓冲(对于流式响应)
proxy_buffering off;
}
5.4 配置负载均衡(可选)
如果你有多台服务器运行GLM-OCR,可以配置负载均衡:
upstream glm_ocr_servers {
server 192.168.1.101:7860 weight=3;
server 192.168.1.102:7860 weight=2;
server 192.168.1.103:7860 weight=1;
# 健康检查
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
# ... 其他配置
location / {
proxy_pass http://glm_ocr_servers;
# ... 其他proxy设置
}
}
6. 完整配置示例
这里是一个完整的Nginx配置示例,包含了所有我们讨论的优化:
# /etc/nginx/sites-available/glm-ocr
# HTTP重定向到HTTPS
server {
listen 80;
listen [::]:80;
server_name ocr.yourdomain.com www.ocr.yourdomain.com;
# ACME挑战目录(Let's Encrypt验证用)
location /.well-known/acme-challenge/ {
root /var/www/html;
}
# 其他所有请求重定向到HTTPS
location / {
return 301 https://$server_name$request_uri;
}
}
# HTTPS主配置
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ocr.yourdomain.com www.ocr.yourdomain.com;
# SSL证书(Let's Encrypt自动配置)
ssl_certificate /etc/letsencrypt/live/ocr.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ocr.yourdomain.com/privkey.pem;
# SSL优化
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
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;
# HSTS(强制HTTPS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" 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 "no-referrer-when-downgrade" always;
# 根目录配置
root /var/www/html;
index index.html;
# GLM-OCR反向代理
location / {
# 访问控制(按需配置)
# allow 192.168.1.0/24;
# deny all;
# 基础认证(按需配置)
# auth_basic "GLM-OCR Access";
# auth_basic_user_file /etc/nginx/.htpasswd;
# 反向代理到GLM-OCR
proxy_pass http://localhost:7860;
# 传递真实IP和协议
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支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置(OCR处理可能需要较长时间)
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
# 缓冲区设置
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_busy_buffers_size 8k;
}
# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# 访问日志
access_log /var/log/nginx/glm-ocr-access.log combined buffer=32k flush=5s;
error_log /var/log/nginx/glm-ocr-error.log warn;
# 错误页面
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
7. 常见问题排查
配置过程中可能会遇到一些问题,这里是一些常见问题的解决方法。
7.1 502 Bad Gateway错误
这个错误通常表示Nginx无法连接到后端的GLM-OCR服务。
检查步骤:
# 1. 检查GLM-OCR服务是否运行
ps aux | grep serve_gradio.py
# 2. 检查端口是否监听
netstat -tlnp | grep 7860
# 3. 测试本地连接
curl -v http://localhost:7860
# 4. 检查Nginx错误日志
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/glm-ocr-error.log
可能的原因和解决方案:
-
GLM-OCR服务没启动:
cd /root/GLM-OCR ./start_vllm.sh -
端口被占用:
# 查看哪个进程占用了7860端口 sudo lsof -i :7860 # 如果不需要,停止该进程 sudo kill -9 <PID> -
SELinux阻止(CentOS/RHEL):
# 临时关闭SELinux sudo setenforce 0 # 永久关闭(需要重启) sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
7.2 SSL证书问题
证书不信任警告:
- 自签名证书:浏览器会显示"不安全",这是正常的
- Let's Encrypt证书:确保域名解析正确,证书申请成功
检查证书:
# 查看证书信息
sudo openssl x509 -in /etc/nginx/ssl/your-domain.com.crt -text -noout
# 测试SSL连接
openssl s_client -connect your-domain.com:443 -servername your-domain.com
7.3 性能问题
如果GLM-OCR响应慢,可以调整Nginx配置:
# 在http块中添加(/etc/nginx/nginx.conf)
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/json application/javascript application/xml+rss application/octet-stream;
}
7.4 连接超时
如果上传大图片时超时:
location / {
proxy_pass http://localhost:7860;
# 增加超时时间
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
# 客户端超时设置
client_max_body_size 100M; # 允许上传100MB的文件
client_body_timeout 600s;
}
8. 自动化部署脚本
为了简化部署过程,你可以创建一个自动化脚本:
#!/bin/bash
# deploy-glm-ocr-nginx.sh
set -e # 遇到错误退出
echo "=== GLM-OCR Nginx反向代理部署脚本 ==="
# 变量配置
DOMAIN="ocr.yourdomain.com"
EMAIL="your-email@example.com"
GLM_PORT="7860"
echo "1. 安装Nginx..."
sudo apt update
sudo apt install nginx -y
echo "2. 配置Nginx反向代理..."
sudo tee /etc/nginx/sites-available/glm-ocr > /dev/null <<EOF
server {
listen 80;
server_name ${DOMAIN};
location / {
proxy_pass http://localhost:${GLM_PORT};
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;
}
}
EOF
echo "3. 启用站点配置..."
sudo ln -sf /etc/nginx/sites-available/glm-ocr /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
echo "4. 安装SSL证书(可选)..."
read -p "是否安装Let's Encrypt SSL证书?(y/n): " install_ssl
if [[ "$install_ssl" == "y" ]]; then
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d ${DOMAIN} --email ${EMAIL} --agree-tos --no-eff-email
fi
echo "5. 配置防火墙..."
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
echo "=== 部署完成 ==="
echo "访问地址: http://${DOMAIN}"
if [[ "$install_ssl" == "y" ]]; then
echo "HTTPS地址: https://${DOMAIN}"
fi
保存为 deploy-glm-ocr-nginx.sh,然后运行:
chmod +x deploy-glm-ocr-nginx.sh
./deploy-glm-ocr-nginx.sh
9. 监控和维护
配置完成后,还需要定期维护。
9.1 监控服务状态
# 查看Nginx状态
sudo systemctl status nginx
# 查看GLM-OCR服务状态
ps aux | grep serve_gradio.py
# 查看日志
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
sudo tail -f /root/GLM-OCR/logs/glm_ocr_*.log
9.2 定期备份配置
# 备份Nginx配置
sudo tar -czf nginx-backup-$(date +%Y%m%d).tar.gz /etc/nginx/
# 备份SSL证书(如果使用Let's Encrypt)
sudo tar -czf letsencrypt-backup-$(date +%Y%m%d).tar.gz /etc/letsencrypt/
9.3 证书自动续期
如果使用Let's Encrypt,证书90天过期,需要自动续期:
# 测试续期
sudo certbot renew --dry-run
# 设置自动续期(crontab)
sudo crontab -e
添加以下行(每周日凌晨2点检查续期):
0 2 * * 0 /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
9.4 性能监控
# 查看Nginx连接状态
sudo netstat -an | grep :443 | wc -l
# 查看服务器负载
top -b -n 1 | head -20
# 查看磁盘空间
df -h
# 查看内存使用
free -h
10. 总结
通过这篇教程,我们完成了GLM-OCR的HTTPS反向代理配置。现在你的GLM-OCR服务已经可以通过安全的HTTPS域名访问了。
主要收获:
- 安全性提升:从HTTP升级到HTTPS,数据传输加密,更安全
- 访问便利:使用域名代替IP+端口,更容易记忆和分享
- 专业形象:浏览器显示安全锁图标,提升信任度
- 灵活扩展:Nginx反向代理为后续扩展(如负载均衡、缓存)打下基础
配置要点回顾:
- 确保GLM-OCR服务在7860端口正常运行
- 安装并配置Nginx反向代理
- 申请并配置SSL证书(推荐Let's Encrypt)
- 优化Nginx配置提升性能和安全性
- 设置监控和维护机制
下一步建议:
- 域名解析:如果你还没有域名,可以考虑注册一个
- CDN加速:如果用户分布广泛,可以考虑使用CDN
- 访问控制:根据需求配置IP白名单或基础认证
- 监控告警:设置服务监控,出现问题及时通知
现在你可以通过 https://your-domain.com 安全地访问GLM-OCR服务了。无论是文本识别、表格提取还是公式识别,都可以通过这个安全的接口进行调用。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐

所有评论(0)