自研Coturn服务器的WebRTC应用线上部署故障求助
WebRTC线上部署故障排查指南
核心排查方向
1. Coturn服务器配置验证
- 检查
turnserver.conf关键配置项:- 确保
external-ip设置为服务器公网IP,格式如external-ip=你的公网IP/内网IP(不能用localhost或内网地址) - 确认
listening-port(默认3478)、tls-listening-port(默认5349)在服务器防火墙/安全组中开放UDP+TCP端口 - 用
turnutils_uclient工具验证账号有效性:turnutils_uclient -u 用户名 -w 密码 你的公网IP -p 3478
- 确保
- 线上环境必须给Coturn配置TLS证书(可使用Let's Encrypt免费证书),浏览器会限制非HTTPS环境下的WebRTC请求
2. 前端ICE服务器配置修正
广播端/接收端的ICE配置必须指向公网地址,不能用localhost:
// 错误示例(仅本地有效) const iceServers = [{ urls: 'stun:localhost:3478' }, { urls: 'turn:localhost:3478', username: 'xxx', credential: 'xxx' }] // 正确示例(线上环境) const iceServers = [ { urls: `stun:${你的公网IP}:3478` }, { urls: `turn:${你的公网IP}:3478`, username: '你的账号', credential: '你的密码' } ]
- 若开启TLS,需改用
turns://协议,端口对应5349
3. 信令服务器(Node.js)配置检查
- 前端连接信令服务器的地址必须用公网域名/IP,且强制使用HTTPS:
const socket = io('https://你的公网域名或IP:端口') - 配置正确的跨域策略,比如用
cors中间件:const cors = require('cors') app.use(cors({ origin: 'https://你的前端域名', credentials: true }))
4. 浏览器环境与权限验证
- 线上WebRTC必须运行在HTTPS环境下,非HTTPS会被浏览器禁用媒体设备访问、ICE候选收集功能
- 打开浏览器控制台(F12),重点排查:
- ICE候选收集失败提示(如
ICE failed, add a STUN server) - WebSocket连接错误
- 媒体设备访问被拒绝的日志
- ICE候选收集失败提示(如
5. 云服务器网络限制排查
- AWS EC2:检查安全组、NACL规则是否放行Coturn(3478/5349 UDP+TCP)、信令服务器端口的双向流量
- Hostinger:确认主机防火墙(如hPanel防火墙)放行目标端口,部分虚拟主机限制UDP端口,建议用VPS部署Coturn
日志排查技巧
- 查看Coturn日志(默认路径
/var/log/turnserver.log),搜索session或error关键字,确认是否有客户端连接记录 - 查看Node.js信令服务器日志,验证offer/answer/candidate等信令消息是否在广播端、接收端之间正常传递
内容的提问来源于stack exchange,提问作者Muzamil Khan
相关产品推荐
相关产品推荐

