# HTTPS 部署指南 ## 问题说明 TUIKit(腾讯云音视频通话组件)使用 WebRTC 技术,根据浏览器安全策略,WebRTC 功能必须在以下环境下才能正常工作: - HTTPS 协议 - localhost 本地环境 当前错误:`http protocol does not support the ability to capture microphone, camera and screen` ## 解决方案:配置 HTTPS ### 方案 1:使用 Let's Encrypt 免费 SSL 证书(推荐) #### 步骤 1:安装 Certbot **Ubuntu/Debian:** ```bash sudo apt update sudo apt install certbot python3-certbot-nginx ``` **CentOS/RHEL:** ```bash sudo yum install certbot python3-certbot-nginx ``` #### 步骤 2:获取 SSL 证书 ```bash # 自动配置 Nginx sudo certbot --nginx -d api.zzzhengyangtang.cn # 或者手动获取证书 sudo certbot certonly --nginx -d api.zzzhengyangtang.cn ``` 按照提示输入邮箱地址,同意服务条款。 #### 步骤 3:配置 Nginx 将项目根目录的 `nginx-production.conf` 文件复制到 Nginx 配置目录: ```bash # 复制配置文件 sudo cp nginx-production.conf /etc/nginx/sites-available/admin # 创建软链接 sudo ln -s /etc/nginx/sites-available/admin /etc/nginx/sites-enabled/ # 修改配置文件中的路径 sudo nano /etc/nginx/sites-available/admin ``` 需要修改的内容: 1. 静态文件路径:`alias /path/to/your/server/public/admin;` 2. 后端 API 端口:`proxy_pass http://127.0.0.1:8000;` #### 步骤 4:测试并重启 Nginx ```bash # 测试配置 sudo nginx -t # 重启 Nginx sudo systemctl restart nginx ``` #### 步骤 5:设置证书自动续期 Let's Encrypt 证书有效期为 90 天,需要定期续期: ```bash # 测试自动续期 sudo certbot renew --dry-run # Certbot 会自动添加 cron 任务,也可以手动添加 sudo crontab -e # 添加以下行(每天凌晨 2 点检查并续期) 0 2 * * * certbot renew --quiet ``` ### 方案 2:使用已有的 SSL 证书 如果您已经有 SSL 证书(.crt 和 .key 文件): 1. 将证书文件上传到服务器: ```bash sudo mkdir -p /etc/nginx/ssl sudo cp your-certificate.crt /etc/nginx/ssl/ sudo cp your-private-key.key /etc/nginx/ssl/ ``` 2. 修改 `nginx-production.conf` 中的证书路径: ```nginx ssl_certificate /etc/nginx/ssl/your-certificate.crt; ssl_certificate_key /etc/nginx/ssl/your-private-key.key; ``` ### 方案 3:使用阿里云/腾讯云 SSL 证书 如果您的域名托管在云服务商: 1. 在云服务商控制台申请免费 SSL 证书 2. 下载 Nginx 格式的证书文件 3. 按照方案 2 的步骤配置 ## 验证 HTTPS 配置 ### 1. 检查证书是否正确安装 ```bash # 使用 openssl 检查 openssl s_client -connect api.zzzhengyangtang.cn:443 -servername api.zzzhengyangtang.cn # 使用 curl 检查 curl -I https://api.zzzhengyangtang.cn/admin ``` ### 2. 在浏览器中访问 访问:`https://api.zzzhengyangtang.cn/admin` 检查: - 地址栏是否显示锁图标 - 证书是否有效 - 是否有安全警告 ### 3. 测试 WebRTC 功能 打开浏览器控制台,应该看到: ``` [TUIKit] Loaded successfully [WebRTC 警告] 不会出现(因为已经是 HTTPS) ``` ## 常见问题 ### Q1: 证书申请失败 **原因:** 域名 DNS 未正确解析到服务器 **解决:** ```bash # 检查域名解析 nslookup api.zzzhengyangtang.cn ping api.zzzhengyangtang.cn ``` 确保域名 A 记录指向服务器 IP。 ### Q2: Nginx 配置测试失败 **检查:** ```bash # 查看详细错误 sudo nginx -t # 查看 Nginx 错误日志 sudo tail -f /var/log/nginx/error.log ``` ### Q3: HTTPS 访问显示 502 错误 **原因:** 后端服务未启动或端口配置错误 **解决:** ```bash # 检查后端服务 sudo netstat -tlnp | grep 8000 # 检查防火墙 sudo ufw status sudo firewall-cmd --list-all ``` ### Q4: 证书过期 **解决:** ```bash # 手动续期 sudo certbot renew # 强制续期 sudo certbot renew --force-renewal ``` ## 安全建议 1. **启用 HSTS**(已在配置中包含) - 强制浏览器使用 HTTPS - 防止中间人攻击 2. **定期更新证书** - Let's Encrypt 证书 90 天有效期 - 设置自动续期任务 3. **配置防火墙** ```bash # 允许 HTTPS 端口 sudo ufw allow 443/tcp sudo ufw allow 80/tcp # 用于 HTTP 重定向和证书验证 ``` 4. **监控证书状态** - 使用 SSL Labs 测试:https://www.ssllabs.com/ssltest/ - 检查证书评级和安全性 ## 部署检查清单 - [ ] 域名 DNS 已正确解析 - [ ] SSL 证书已申请并安装 - [ ] Nginx 配置已更新 - [ ] 静态文件路径已修改 - [ ] API 代理端口已配置 - [ ] Nginx 配置测试通过 - [ ] Nginx 已重启 - [ ] HTTPS 访问正常 - [ ] HTTP 自动重定向到 HTTPS - [ ] WebRTC 功能正常(无协议错误) - [ ] 证书自动续期已配置 ## 联系支持 如果遇到问题,请检查: 1. Nginx 错误日志:`/var/log/nginx/error.log` 2. 浏览器控制台错误信息 3. 服务器防火墙设置 4. 域名 DNS 解析状态