)
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 nginx1.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.1client_max_body_size文件上传限制100M1.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安全加固实战Lets 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 证书自动续期Lets Encrypt证书有效期仅90天设置自动续期至关重要sudo crontab -e添加以下行每天凌晨检查续期0 0 * * * /usr/bin/certbot renew --quiet --post-hook systemctl reload nginx3. Docker网络与服务通信优化当WVP、ZLMediaKit、MySQL和Redis都运行在Docker环境中时网络配置直接影响服务稳定性。3.1 自定义网络创建推荐创建专用网络而非使用默认bridgedocker 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?useSSLfalseallowPublicKeyRetrievaltrue username: root password: 12345678 redis: host: 172.28.0.2 port: 6379 password: 123456784. 安全加固进阶措施4.1 防火墙配置Ubuntu默认使用ufw建议开启必要端口sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 5060/udp # SIP端口 sudo ufw enable4.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连接失败症状视频流无法播放或频繁断开 解决方案确认Nginx配置中包含WebSocket相关头信息检查WVP的application.yml中websocket配置ws: port: 18080 ssl: false5.2 HTTPS混合内容问题症状页面部分资源加载被阻止 解决方法确保前端代码中所有资源使用相对路径或https协议在Nginx中添加响应头add_header Content-Security-Policy upgrade-insecure-requests;5.3 数据库连接超时症状服务间歇性不可用 排查步骤检查Docker容器网络连通性docker exec -it wvp容器ID ping 172.28.0.3调整MySQL连接池参数spring: datasource: hikari: maximum-pool-size: 20 connection-timeout: 30000在实际运维中我们发现最耗时的往往不是技术实现而是各组件版本兼容性问题。建议建立完整的版本对应表组件测试版本备注WVP-Pro2.6.6需JDK11ZLMediaKit最新master分支需开启WebRTCNginx1.18需支持HTTP2