GB28181视频平台避坑指南:WVP-Pro + ZLMediaKit部署后,如何配置Nginx反代与HTTPS(Ubuntu 22.04)
2026/6/1 4:40:04 网站建设 项目流程

GB28181视频平台生产环境实战:Nginx反代与HTTPS配置全解析

在完成WVP-Pro与ZLMediaKit的基础部署后,真正考验才刚刚开始。当您准备将这套GB28181视频平台投入生产环境时,如何确保服务的安全性与稳定性成为首要任务。本文将带您深入解决三个核心问题:Nginx反向代理配置、HTTPS证书部署以及Docker网络优化。

1. Nginx反向代理配置精要

反向代理不仅是将18080端口映射到80端口的简单操作,更是安全防护的第一道屏障。对于Ubuntu 22.04系统,我们需要先确保Nginx已安装最新版本:

sudo apt update && sudo apt install -y nginx

1.1 基础代理配置

/etc/nginx/sites-available目录下创建专属配置文件(如wvp-proxy),这是生产环境推荐的做法:

server { listen 80; server_name yourdomain.com; # 替换为实际域名 location / { proxy_pass http://127.0.0.1:18080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 重要WebSocket配置 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } access_log /var/log/nginx/wvp_access.log; error_log /var/log/nginx/wvp_error.log; }

关键配置项说明:

配置项作用推荐值
proxy_pass后端服务地址根据实际IP调整
proxy_http_versionWebSocket支持1.1
client_max_body_size文件上传限制100M

1.2 性能优化参数

在生产环境中,以下参数能显著提升代理性能:

proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300;

注意:修改配置后务必执行sudo nginx -t测试配置,再通过sudo systemctl reload nginx生效

2. HTTPS安全加固实战

Let's Encrypt证书已成为行业标准,我们使用Certbot工具自动化完成证书申请和配置。

2.1 证书申请全流程

安装Certbot及其Nginx插件:

sudo apt install -y certbot python3-certbot-nginx

执行证书申请(交互式操作):

sudo certbot --nginx -d yourdomain.com

申请成功后,Certbot会自动修改Nginx配置。典型生成的HTTPS配置如下:

server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/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 on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # 其余配置与HTTP版本相同 location / { proxy_pass http://127.0.0.1:18080; # ...保持原有proxy配置 } }

2.2 证书自动续期

Let's Encrypt证书有效期仅90天,设置自动续期至关重要:

sudo crontab -e

添加以下行(每天凌晨检查续期):

0 0 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

3. Docker网络与服务通信优化

当WVP、ZLMediaKit、MySQL和Redis都运行在Docker环境中时,网络配置直接影响服务稳定性。

3.1 自定义网络创建

推荐创建专用网络而非使用默认bridge:

docker network create --driver bridge --subnet 172.28.0.0/16 wvp-network

修改video.yml文件,加入网络配置:

version: "3.8" networks: wvp-net: driver: bridge ipam: config: - subnet: 172.28.0.0/16 services: redis: networks: wvp-net: ipv4_address: 172.28.0.2 # ...其他配置不变 mysql: networks: wvp-net: ipv4_address: 172.28.0.3 # ...其他配置不变

3.2 WVP连接配置调整

修改application.yml中的数据库和Redis连接信息:

spring: datasource: url: jdbc:mysql://172.28.0.3:3306/wvp?useSSL=false&allowPublicKeyRetrieval=true username: root password: 12345678 redis: host: 172.28.0.2 port: 6379 password: 12345678

4. 安全加固进阶措施

4.1 防火墙配置

Ubuntu默认使用ufw,建议开启必要端口:

sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 5060/udp # SIP端口 sudo ufw enable

4.2 服务隔离

考虑将数据库与应用服务分离部署:

services/ ├── db/ # 数据库服务 │ ├── mysql/ │ └── redis/ └── app/ # 应用服务 ├── wvp/ └── zlm/

4.3 监控与日志

配置日志轮转防止磁盘爆满,在/etc/logrotate.d/下创建配置文件:

/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate systemctl reload nginx endscript }

5. 常见问题排错指南

5.1 WebSocket连接失败

症状:视频流无法播放或频繁断开 解决方案:

  1. 确认Nginx配置中包含WebSocket相关头信息
  2. 检查WVP的application.yml中websocket配置:
ws: port: 18080 ssl: false

5.2 HTTPS混合内容问题

症状:页面部分资源加载被阻止 解决方法:

  1. 确保前端代码中所有资源使用相对路径或https协议
  2. 在Nginx中添加响应头:
add_header Content-Security-Policy "upgrade-insecure-requests";

5.3 数据库连接超时

症状:服务间歇性不可用 排查步骤:

  1. 检查Docker容器网络连通性:
docker exec -it wvp容器ID ping 172.28.0.3
  1. 调整MySQL连接池参数:
spring: datasource: hikari: maximum-pool-size: 20 connection-timeout: 30000

在实际运维中,我们发现最耗时的往往不是技术实现,而是各组件版本兼容性问题。建议建立完整的版本对应表:

组件测试版本备注
WVP-Pro2.6.6需JDK11+
ZLMediaKit最新master分支需开启WebRTC
Nginx1.18+需支持HTTP2

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询