部署在Digital Ocean Ubuntu的OpenVidu出现ERRCONNRESET错误求助
解决OpenVidu部署在DigitalOcean Ubuntu上的ERRCONNRESET会话连接问题
我帮你梳理下这个ERRCONNRESET问题的排查方向,结合你描述的场景(本地运行正常、已配置可信HTTPS证书、默认账号登录无异常),大概率是网络配置或WebSocket通信层面的问题,咱们一步步来排查:
1. 先确认DigitalOcean安全组与Ubuntu防火墙的端口开放
OpenVidu除了HTTPS的443端口,还需要一系列媒体流和STUN服务的端口,这些端口没开放的话,会话连接会直接中断:
- 登录DigitalOcean控制面板,进入你的Droplet对应的安全组设置,确保开放以下端口:
443/tcp(HTTPS)3478/tcp、3478/udp(STUN服务)40000-65535/udp、40000-65535/tcp(媒体流传输)
- 再检查Ubuntu本地的
ufw防火墙规则:
运行命令查看当前开放端口:
如果上面的端口没在列表里,添加规则并重启防火墙:sudo ufw statussudo ufw allow 443/tcp sudo ufw allow 3478/tcp sudo ufw allow 3478/udp sudo ufw allow 40000-65535/udp sudo ufw allow 40000-65535/tcp sudo ufw reload
2. 验证OpenVidu Server的核心配置
登录正常但会话连不上,大概率是WebSocket的配置出了问题:
- 打开OpenVidu的环境配置文件(通常在
/opt/openvidu/.env),检查两个关键参数:OPENVIDU_DOMAIN_OR_PUBLIC_IP:必须填你绑定HTTPS证书的域名,不能用IP地址(证书是和域名绑定的,IP会导致SSL握手失败)OPENVIDU_SECURE:设置为true,确保启用HTTPS模式的WebSocket
- 重启OpenVidu服务让配置生效:
sudo systemctl restart openvidu-server
3. 检查NodeJS客户端的连接参数
本地正常说明代码逻辑没问题,但服务器环境下可能连接地址配置有误:
- 确保客户端初始化OpenVidu时,用的是完整的线上HTTPS域名,比如:
别用const ov = new OpenVidu('https://your-production-domain.com');localhost或者服务器IP,不然WebSocket会因为域名和证书不匹配直接断开 - 检查代码里有没有硬编码本地环境的连接地址,部署时一定要替换成线上域名
4. 排查WebSocket的SSL兼容性
即使是可信证书,NodeJS版本过低或者客户端SSL配置不当也会导致连接中断:
- 如果你的客户端用的是
openvidu-node-client,可以显式配置WebSocket的SSL选项,确保Origin和域名一致:const ov = new OpenVidu('https://your-production-domain.com', { wsOptions: { rejectUnauthorized: true, // 可信证书设为true,自签证书才需要设为false headers: { 'Origin': 'https://your-production-domain.com' } } }); - 建议把NodeJS升级到LTS版本(比如18.x或20.x),旧版本对部分新型SSL证书的兼容性较差
5. 查看日志定位具体错误
如果上面的步骤都没解决,直接看日志找线索:
- 查看OpenVidu Server的实时日志:
sudo journalctl -u openvidu-server -f - 同时观察NodeJS终端的错误栈,看是SSL握手失败、连接超时还是其他具体问题
6. 直接测试WebSocket连接
用wscat工具直接测试WebSocket连通性,能快速定位问题:
- 先安装工具:
npm install -g wscat - 运行测试命令:
wscat -c wss://your-production-domain.com/openvidu - 如果连接成功会显示握手信息;如果失败,终端会给出具体错误(比如证书不匹配、端口不通)
按照上面的步骤逐一排查,基本能解决这个ERRCONNRESET问题。大部分情况下,都是端口未开放或者WebSocket的域名/SSL配置不匹配导致的。
内容的提问来源于stack exchange,提问作者Abhilash
相关产品推荐
相关产品推荐

