Paraformer-large HTTPS加密访问:Nginx反向代理配置实战
1. 为什么需要HTTPS反向代理?
你已经成功部署了 Paraformer-large 语音识别离线版,Gradio 界面跑在http://0.0.0.0:6006上——但这个地址只能在本地或内网访问,且是明文 HTTP。如果想让团队成员、客户或远程设备安全地使用这个语音转写服务,就必须解决两个关键问题:
- 外网可访问:不依赖 SSH 隧道,直接通过域名访问
- 通信安全:防止音频文件、识别结果等敏感数据在传输中被截获
而 Nginx 反向代理 + HTTPS 就是最轻量、最稳定、最通用的解决方案。它不修改你的 Gradio 应用一行代码,只在服务器前端加一层“安全门卫”:所有外部请求走 HTTPS(如https://asr.yourdomain.com),Nginx 接收后解密,再以 HTTP 方式转发给本地的http://127.0.0.1:6006,最后把响应加密返回给用户。
这不是“高级玩法”,而是生产环境的标配。本文将带你从零完成全部配置,不跳步、不假设、不依赖云厂商控制台——纯命令行操作,一次配好,长期可用。
2. 前置准备:确认服务已稳定运行
在配置 Nginx 之前,请务必确保 Paraformer-large 的 Gradio 服务已在后台稳定运行。别跳过这一步,90% 的反向代理失败都源于后端服务本身没跑起来。
2.1 检查服务状态
登录服务器终端,执行:
ps aux | grep "python.*app.py"你应该看到类似输出:
root 12345 0.1 8.2 4567890 123456 ? S Jan01 2:15 python app.py如果没有,请先手动启动服务:
source /opt/miniconda3/bin/activate torch25 && cd /root/workspace && nohup python app.py > asr.log 2>&1 &说明:
nohup保证终端关闭后服务不退出;> asr.log 2>&1把日志统一存到文件,方便后续排查。
2.2 验证本地访问是否正常
在服务器内部用 curl 测试:
curl -s http://127.0.0.1:6006 | head -20如果返回 HTML 内容(含<title>Paraformer 语音转文字控制台</title>),说明 Gradio 已就绪。若超时或报错,请先检查app.py中demo.launch(...)是否设置了server_name="0.0.0.0"和正确端口。
2.3 确认端口未被占用
Gradio 默认监听6006,请确保该端口空闲:
ss -tuln | grep ':6006'若已有进程占用,可在app.py中改为其他端口(如6007),并同步更新后续所有配置。
3. 安装与配置 Nginx
Nginx 是轻量、高性能的反向代理服务器,Ubuntu/Debian 和 CentOS/RHEL 系统安装方式略有不同。以下命令自动适配主流发行版。
3.1 一键安装 Nginx
# Ubuntu/Debian sudo apt update && sudo apt install -y nginx # CentOS/RHEL (含 AlmaLinux、Rocky Linux) sudo dnf install -y nginx # 或旧版 CentOS 7 # sudo yum install -y nginx安装完成后,启动并设为开机自启:
sudo systemctl enable nginx sudo systemctl start nginx验证 Nginx 是否运行:
sudo systemctl status nginx | grep "active (running)"此时,在浏览器访问你的服务器公网 IP(如http://123.45.67.89),应看到 Nginx 默认欢迎页。
3.2 创建专用配置文件
不要直接修改/etc/nginx/nginx.conf—— 这是主配置,易出错且升级时可能被覆盖。标准做法是:在/etc/nginx/conf.d/下新建独立配置文件。
创建文件:
sudo vim /etc/nginx/conf.d/paraformer-asr.conf粘贴以下完整配置(已针对 Gradio 优化):
upstream asr_backend { server 127.0.0.1:6006; } server { listen 80; server_name asr.yourdomain.com; # ← 替换为你的真实域名! # 强制跳转 HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name asr.yourdomain.com; # ← 同样替换! # SSL 证书路径(稍后生成) ssl_certificate /etc/nginx/ssl/asr.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/asr.yourdomain.com/privkey.pem; # Gradio 专用优化:支持长连接、大请求体、WebSocket 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_buffering off; client_max_body_size 2G; # 支持上传 2GB 音频文件 proxy_read_timeout 3600; # 长音频处理可能耗时较长 proxy_send_timeout 3600; location / { proxy_pass http://asr_backend; proxy_redirect off; } # Gradio 的静态资源和 WebSocket 路径 location /gradio_static/ { alias /root/workspace/gradio_static/; expires 1h; } location /queue/join { proxy_pass http://asr_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }关键修改点:
- 将
asr.yourdomain.com替换为你实际注册并解析到本服务器 IP 的域名(如asr.example.ai)。- 若暂无域名,可先用免费二级域名(如
asr.freenom.ml)或修改本地 hosts 文件临时测试。client_max_body_size 2G是为支持长录音(如会议录音、播客)预留,可根据需求调整。
3.3 测试配置语法并重载
保存文件后,检查语法是否正确:
sudo nginx -t输出应为:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful然后重载配置,使生效:
sudo systemctl reload nginx此时,访问http://asr.yourdomain.com应自动跳转到https://...,但会提示“您的连接不是私密连接”——因为 SSL 证书还没配置。下一步解决。
4. 免费获取并配置 HTTPS 证书(Certbot)
我们使用 Let’s Encrypt 提供的 Certbot 工具,全自动申请、部署、续期 SSL 证书,全程免费、合法、受所有浏览器信任。
4.1 安装 Certbot
# Ubuntu/Debian sudo apt install -y certbot python3-certbot-nginx # CentOS/RHEL 8+ sudo dnf install -y certbot python3-certbot-nginx # CentOS 7 sudo yum install -y epel-release sudo yum install -y certbot python2-certbot-nginx4.2 申请证书(单步命令)
确保你的域名asr.yourdomain.com已正确解析到服务器公网 IP(可通过ping asr.yourdomain.com验证)。然后执行:
sudo certbot --nginx -d asr.yourdomain.comCertbot 会自动:
- 检测 Nginx 配置中的
server_name - 临时开启 80 端口进行域名所有权验证(ACME 协议)
- 申请证书并写入
/etc/nginx/ssl/...(与上一步配置路径完全一致) - 自动更新 Nginx 配置中的
ssl_certificate和ssl_certificate_key行
过程中会提示你输入邮箱(用于证书到期提醒)和是否同意协议,按提示操作即可。
成功后你会看到类似提示:
Congratulations! You have successfully enabled https://asr.yourdomain.com4.3 验证 HTTPS 访问
打开浏览器,访问:
https://asr.yourdomain.com你应该看到完整的 Gradio 界面,地址栏显示绿色锁图标,点击锁图标可查看证书由 “Let’s Encrypt” 签发——HTTPS 已生效。
小技巧:在浏览器开发者工具(F12)的 Network 标签页中,刷新页面,观察所有请求的 Protocol 列是否均为
h2(HTTP/2),这是 HTTPS + Nginx 优化的标志。
5. 生产环境加固与常见问题
配置虽已完成,但要真正投入日常使用,还需几个关键加固点和排障指南。
5.1 自动续期证书(必须设置!)
Let’s Encrypt 证书有效期仅 90 天。Certbot 已为你配置了 systemd timer,但需手动启用:
sudo systemctl enable certbot-renew.timer sudo systemctl start certbot-renew.timer验证定时任务是否激活:
sudo systemctl list-timers | grep certbot你将看到类似certbot-renew.timer每天凌晨 02:00-03:00 运行一次。无需额外操作,证书将自动续期。
5.2 解决 Gradio WebSocket 断连问题
Gradio 的实时进度条、流式输出依赖 WebSocket。若发现点击“开始转写”后界面卡住、无响应,大概率是 Nginx 的 WebSocket 配置未生效。
请确认paraformer-asr.conf中以下三行必须同时存在于server块内(非location内):
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";并确保location /queue/join { ... }块已正确定义(上文配置已包含)。
5.3 处理大音频上传超时
Paraformer 处理 1 小时以上音频可能耗时 5–10 分钟。若浏览器提示504 Gateway Timeout,需调大 Nginx 超时时间:
在paraformer-asr.conf的server块中,添加或修改:
proxy_connect_timeout 3600; proxy_send_timeout 3600; proxy_read_timeout 3600;然后sudo systemctl reload nginx。
5.4 日志排查黄金组合
当遇到问题时,按顺序检查以下三个日志:
| 日志位置 | 查看命令 | 重点关注 |
|---|---|---|
| Nginx 错误日志 | sudo tail -f /var/log/nginx/error.log | 404/502/504 错误、SSL 加载失败、权限拒绝 |
| Nginx 访问日志 | sudo tail -f /var/log/nginx/access.log | 请求是否到达 Nginx、状态码、客户端 IP |
| Gradio 应用日志 | tail -f /root/workspace/asr.log | 模型加载失败、CUDA 内存不足、音频解码错误 |
例如,若error.log出现connect() failed (111: Connection refused) while connecting to upstream,说明 Gradio 服务没起来;若asr.log报CUDA out of memory,则需降低batch_size_s或换更大显存 GPU。
6. 总结:你已拥有一套企业级语音识别服务
回顾整个过程,你完成了:
- 将本地 Gradio 服务暴露为可公开访问的 Web 服务
- 通过 Nginx 实现零代码改造的反向代理
- 使用 Let’s Encrypt 获取受信任的 HTTPS 证书
- 针对语音识别场景深度优化:大文件上传、长连接、WebSocket 支持
- 配置自动续期与日志监控,具备生产环境稳定性
这套架构不依赖任何闭源平台,全部基于开源组件(FunASR、Gradio、Nginx、Certbot),可自由迁移、审计、二次开发。无论是嵌入内部知识库、集成到客服系统,还是作为 SaaS 产品提供 API,它都是坚实可靠的基础。
下一步,你可以:
- 将
app.py封装为 REST API(用 FastAPI 包一层),供其他程序调用 - 在 Nginx 层添加 Basic Auth,限制未授权访问
- 配置 Prometheus + Grafana 监控 GPU 显存、请求延迟等指标
语音识别不再是实验室玩具,而是你手边随时可用的生产力工具。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。