GLM-OCR部署教程:Nginx反向代理配置,支持域名访问与基础认证(Basic Auth)

1. 项目概述与环境准备

GLM-OCR是一个基于GLM-V编码器-解码器架构构建的多模态OCR模型,专门为复杂文档理解而设计。它集成了在大规模图文数据上预训练的CogViT视觉编码器、轻量级跨模态连接器以及GLM-0.5B语言解码器,支持文本识别、表格识别和公式识别等多种功能。

核心特性

  • 模型大小:2.5GB
  • 服务端口:7860
  • 默认访问地址:http://localhost:7860
  • 支持设备:CUDA/CPU

环境要求

  • Conda环境:py310
  • Python:3.10.19
  • PyTorch:2.9.1
  • Transformers:5.0.1.dev0

2. 基础服务部署

2.1 启动GLM-OCR服务

首先进入项目目录并启动基础服务:

# 进入项目目录
cd /root/GLM-OCR

# 启动服务(使用绝对路径的conda环境)
./start_vllm.sh

首次启动需要加载模型,大约需要1-2分钟时间。启动成功后,服务将在本地7860端口运行。

2.2 验证服务状态

通过以下命令检查服务是否正常运行:

# 检查端口占用情况
netstat -tlnp | grep 7860

# 查看服务日志
tail -f /root/GLM-OCR/logs/glm_ocr_*.log

如果服务启动失败,常见问题及解决方法:

# 端口被占用处理
lsof -i :7860  # 查看占用进程
kill <PID>     # 停止进程

# 显存不足处理
nvidia-smi                    # 查看GPU状态
pkill -f serve_gradio.py      # 停止服务释放显存

3. Nginx反向代理配置

3.1 安装Nginx

在Ubuntu系统上安装Nginx:

sudo apt update
sudo apt install nginx

启动Nginx服务并设置开机自启:

sudo systemctl start nginx
sudo systemctl enable nginx

3.2 配置反向代理

创建Nginx配置文件:

sudo nano /etc/nginx/sites-available/glm-ocr

添加以下配置内容:

server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名
    
    # 反向代理配置
    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支持(如果Gradio使用)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    
    # 静态文件缓存配置
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

启用配置文件并测试:

# 创建符号链接
sudo ln -s /etc/nginx/sites-available/glm-ocr /etc/nginx/sites-enabled/

# 测试配置语法
sudo nginx -t

# 重新加载Nginx
sudo systemctl reload nginx

3.3 域名解析配置

在域名服务商处添加A记录解析:

  • 记录类型:A
  • 主机记录:@ 或你想要的子域名(如ocr)
  • 记录值:你的服务器IP地址

等待DNS解析生效(通常需要几分钟到几小时)。

4. 基础认证配置

4.1 创建密码文件

使用htpasswd工具创建认证文件:

# 安装apache2-utils(如果尚未安装)
sudo apt install apache2-utils

# 创建密码文件
sudo htpasswd -c /etc/nginx/.htpasswd username

系统会提示输入密码,完成后会生成加密的密码文件。

4.2 配置基础认证

修改Nginx配置文件,添加认证配置:

server {
    listen 80;
    server_name your-domain.com;
    
    # 基础认证配置
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.htpasswd;
    
    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;
        
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

4.3 多用户配置

如果需要添加多个用户:

# 添加新用户(不使用-c参数,避免覆盖原有文件)
sudo htpasswd /etc/nginx/.htpasswd another_username

查看现有用户:

cat /etc/nginx/.htpasswd

5. SSL证书配置(可选但推荐)

5.1 安装Certbot

使用Let's Encrypt获取免费SSL证书:

# 安装Certbot
sudo apt install certbot python3-certbot-nginx

# 获取SSL证书
sudo certbot --nginx -d your-domain.com

按照提示操作,Certbot会自动配置SSL并更新Nginx配置。

5.2 强制HTTPS重定向

修改Nginx配置,强制使用HTTPS:

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name your-domain.com;
    
    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
    
    # 其他配置保持不变...
}

6. 完整配置示例

以下是完整的Nginx配置示例:

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

# HTTPS服务器配置
server {
    listen 443 ssl http2;
    server_name your-domain.com;
    
    # SSL证书配置
    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
    
    # 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;
    
    # 基础认证
    auth_basic "GLM-OCR Access";
    auth_basic_user_file /etc/nginx/.htpasswd;
    
    # 反向代理配置
    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;
        
        # 超时设置
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
        
        # WebSocket支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    
    # 静态资源缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        proxy_pass http://localhost:7860;
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    
    # 健康检查端点
    location /health {
        access_log off;
        proxy_pass http://localhost:7860;
        proxy_set_header Host $host;
    }
}

7. 测试与验证

7.1 测试Nginx配置

# 检查配置语法
sudo nginx -t

# 重新加载配置
sudo systemctl reload nginx

# 查看Nginx状态
sudo systemctl status nginx

7.2 测试域名访问

在浏览器中访问配置的域名,应该看到认证弹窗:

  1. 输入之前设置的用户名和密码
  2. 成功登录后应该看到GLM-OCR的Web界面
  3. 测试各项功能是否正常工作

7.3 API调用测试

使用配置的域名进行API调用:

from gradio_client import Client
import requests

# 使用基础认证的API调用
client = Client("https://your-domain.com")

# 或者直接使用requests库
response = requests.get(
    "https://your-domain.com",
    auth=('username', 'password')
)

print(response.status_code)

8. 故障排除与优化

8.1 常见问题解决

认证失败

  • 检查密码文件权限:sudo chmod 644 /etc/nginx/.htpasswd
  • 确认用户名密码正确

502 Bad Gateway

  • 检查GLM-OCR服务是否运行:ps aux | grep gradio
  • 查看Nginx错误日志:sudo tail -f /var/log/nginx/error.log

连接超时

  • 增加Nginx超时设置
  • 检查防火墙设置

8.2 性能优化建议

# 在http块中添加以下配置
http {
    # 连接池配置
    upstream glm_ocr {
        server localhost:7860;
        keepalive 32;
    }
    
    # 在其他server配置中使用
    location / {
        proxy_pass http://glm_ocr;
        # 其他配置...
    }
}

8.3 安全加固

# 隐藏服务器版本信息
server_tokens off;

# 防止点击劫持
add_header X-Frame-Options DENY;

# XSS保护
add_header X-XSS-Protection "1; mode=block";

# 防止MIME类型混淆
add_header X-Content-Type-Options nosniff;

9. 总结

通过本教程,你已经成功配置了Nginx反向代理,使GLM-OCR服务支持域名访问和基础认证。这种配置方式不仅提高了服务的安全性,还使得服务更容易管理和访问。

主要收获

  • 学会了如何配置Nginx反向代理
  • 掌握了基础认证的设置方法
  • 了解了SSL证书的配置流程
  • 获得了服务优化和安全加固的知识

现在你的GLM-OCR服务已经可以通过域名安全访问,并且只有授权用户才能使用。这种部署方式特别适合企业内部使用或需要限制访问的场景。


获取更多AI镜像

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

Logo

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

更多推荐