cv_resnet18_ocr-detection部署教程:Nginx反向代理配置详解
1. 引言:为什么需要Nginx反向代理?
你已经成功部署了cv_resnet18_ocr-detectionOCR文字检测模型,WebUI界面也能通过http://服务器IP:7860正常访问。但直接暴露7860端口存在安全隐患,且不利于生产环境使用。
本文将带你一步步完成Nginx反向代理配置,实现:
- 使用标准HTTP(80)或HTTPS(443)端口访问服务
- 隐藏后端真实端口,提升安全性
- 支持域名访问,便于团队协作和对外展示
- 提升请求处理能力与稳定性
本教程适用于已能本地运行 WebUI 的用户,重点解决“如何让别人更安全、更方便地使用你的OCR服务”。
2. 环境准备与前置条件
2.1 基础要求确认
在开始前,请确保以下条件满足:
| 条件 | 检查方式 |
|---|---|
| WebUI服务正常运行 | 浏览器可打开http://IP:7860 |
| 服务器安装Nginx | 执行nginx -v查看版本 |
| 具备root或sudo权限 | 能修改系统配置文件 |
| 开放80/443端口 | 安全组、防火墙允许入站 |
如果未安装 Nginx,执行以下命令安装(以 Ubuntu 为例):
sudo apt update sudo apt install nginx -y安装完成后启动并设置开机自启:
sudo systemctl start nginx sudo systemctl enable nginx此时访问http://服务器IP应能看到 Nginx 默认欢迎页。
2.2 当前服务状态验证
进入项目目录,确认 WebUI 已启动:
cd /root/cv_resnet18_ocr-detection ps aux | grep python应看到类似输出:
python app.py --host 0.0.0.0 --port 7860同时测试本地是否可访问:
curl -I http://127.0.0.1:7860返回HTTP/1.1 200 OK表示服务正常。
3. Nginx反向代理配置详解
3.1 创建自定义站点配置文件
Nginx 默认站点配置位于/etc/nginx/sites-available/default,但我们建议创建独立配置文件,避免影响其他服务。
新建配置文件:
sudo nano /etc/nginx/sites-available/ocr-detection填入以下内容:
server { listen 80; server_name your-domain.com; # 替换为你的域名或服务器IP location / { proxy_pass http://127.0.0.1:7860; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; 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 $server_name; proxy_cache_bypass $http_upgrade; # 设置超时时间,防止大图处理中断 proxy_connect_timeout 60s; proxy_send_timeout 300s; proxy_read_timeout 300s; } }关键参数说明:
| 参数 | 作用 |
|---|---|
listen 80 | 监听HTTP默认端口 |
server_name | 绑定域名或IP地址 |
proxy_pass | 转发请求到本地7860端口 |
proxy_http_version 1.1 | 支持WebSocket等长连接 |
Upgrade和Connection头 | 确保Gradio类应用的实时通信正常 |
| 超时设置 | 防止图片处理耗时过长导致断开 |
如果你没有域名,可将
server_name设为服务器公网IP;若有域名,请提前解析A记录指向该IP。
3.2 启用站点配置
创建软链接,启用该站点:
sudo ln -s /etc/nginx/sites-available/ocr-detection /etc/nginx/sites-enabled/删除默认站点(可选,避免冲突):
sudo rm /etc/nginx/sites-enabled/default3.3 测试配置并重启Nginx
检查配置语法是否正确:
sudo nginx -t若提示syntax is ok和test is successful,则重启Nginx生效配置:
sudo systemctl restart nginx4. 访问验证与常见问题排查
4.1 浏览器访问测试
打开浏览器,输入:
http://your-domain.com或
http://服务器公网IP你应该看到 OCR 文字检测 WebUI 页面正常加载,标题区域显示:
OCR 文字检测服务 webUI二次开发 by 科哥 | 微信:312088415 承诺永远开源使用 但是需要保留本人版权信息!说明反向代理已成功!
4.2 常见问题及解决方案
问题一:页面无法打开,提示“连接超时”
可能原因:
- 防火墙未开放80端口
- 安全组规则未放行
- Nginx未正确启动
解决方法:
# 检查Nginx状态 sudo systemctl status nginx # 查看80端口监听情况 sudo lsof -i :80 # 开放防火墙(Ubuntu) sudo ufw allow 80云服务器还需登录控制台,在安全组中添加入站规则:端口80,协议TCP。
问题二:页面加载卡顿或部分资源失败
现象:界面元素缺失、按钮无响应、JS/CSS加载失败。
原因分析:静态资源路径未正确代理。
解决方案:确保proxy_pass指向的是完整后端服务,并且 Gradio 应用本身支持根路径访问。当前cv_resnet18_ocr-detection使用标准 Gradio 构建,无需额外配置子路径。
如需部署多个AI服务,建议使用不同子路径(如/ocr),但需修改应用启动参数,超出本文范围。
问题三:批量检测中途断开
现象:处理多张图片时,长时间无响应后报错。
根本原因:Nginx默认超时时间太短。
修复方式:已在配置中设置:
proxy_send_timeout 300s; proxy_read_timeout 300s;表示允许最长5分钟的推理时间,足以应对大多数OCR任务。
5. 进阶配置:启用HTTPS加密访问
为了让服务更安全,推荐启用 HTTPS。我们可以使用免费的 Let's Encrypt 证书。
5.1 安装 Certbot
sudo apt install certbot python3-certbot-nginx -y5.2 申请并配置SSL证书
运行以下命令,按提示操作:
sudo certbot --nginx -d your-domain.com注意:
your-domain.com必须已正确解析到服务器IP。
Certbot 会自动修改 Nginx 配置,重定向HTTP到HTTPS,并定期续期证书。
5.3 验证HTTPS访问
完成后,访问:
https://your-domain.com浏览器地址栏应显示锁形图标,表示连接已加密。
此时原始http://请求会自动跳转至https://。
6. 性能优化建议
虽然 Nginx 本身性能强大,但在高并发场景下仍需合理调优。
6.1 调整客户端请求限制
防止恶意上传过大文件,可在 Nginx 中限制请求体大小:
client_max_body_size 20M;加入server块中,表示最大允许上传20MB的图片。
6.2 启用Gzip压缩
减少传输数据量,提升加载速度:
gzip on; gzip_types text/plain application/json text/css application/javascript text/xml application/xml;6.3 设置缓存策略(可选)
对于静态资源(如JS、CSS),可设置短期缓存:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires 1h; add_header Cache-Control "public, must-revalidate"; }注意:Gradio 自动生成的资源带哈希值,可放心缓存。
7. 安全加固建议
7.1 禁用服务器信息泄露
编辑主配置文件:
sudo nano /etc/nginx/nginx.conf在http块中添加:
server_tokens off;隐藏 Nginx 版本号,降低被针对性攻击的风险。
7.2 防止DDoS基础防护
使用limit_req模块限制请求频率:
http { limit_req_zone $binary_remote_addr zone=ocr:10m rate=10r/s; server { location / { limit_req zone=ocr burst=20 nodelay; proxy_pass http://127.0.0.1:7860; # 其他代理设置... } } }表示单个IP每秒最多10次请求,突发允许20次。
8. 自动化脚本:一键部署Nginx配置
为了方便重复部署,可编写自动化脚本。
新建脚本文件:
nano setup_nginx_proxy.sh内容如下:
#!/bin/bash DOMAIN=$1 if [ -z "$DOMAIN" ]; then echo "请指定域名或IP:bash setup_nginx_proxy.sh your-domain.com" exit 1 fi CONFIG="/etc/nginx/sites-available/ocr-detection" cat > $CONFIG << EOF server { listen 80; server_name $DOMAIN; client_max_body_size 20M; gzip on; gzip_types text/plain application/json text/css application/javascript; location / { proxy_pass http://127.0.0.1:7860; proxy_http_version 1.1; proxy_set_header Upgrade \$http_upgrade; proxy_set_header Connection 'upgrade'; 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_cache_bypass \$http_upgrade; proxy_connect_timeout 60s; proxy_send_timeout 300s; proxy_read_timeout 300s; } } EOF ln -sf $CONFIG /etc/nginx/sites-enabled/ocr-detection rm -f /etc/nginx/sites-enabled/default nginx -t && systemctl restart nginx echo " Nginx反向代理配置完成!" echo "请访问:http://$DOMAIN"赋予执行权限并运行:
chmod +x setup_nginx_proxy.sh sudo bash setup_nginx_proxy.sh your-domain.com9. 总结
通过本文,你已完成cv_resnet18_ocr-detection模型服务的Nginx反向代理部署全流程,包括:
- Nginx安装与基本配置
- 反向代理规则编写与启用
- HTTP访问验证与故障排查
- HTTPS加密升级(Let's Encrypt)
- 性能与安全优化建议
- 一键部署脚本编写
现在,你的OCR服务不仅更加专业、安全,也更适合团队共享或集成到其他系统中。
下一步你可以考虑:
- 配合 Docker 封装整个环境
- 添加用户认证机制(如HTTP Basic Auth)
- 接入内网穿透实现外网访问
只要核心服务稳定运行,Nginx就是你通往生产环境的最佳桥梁。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。