Node.js WebSocket在OVH/Kimsufi服务器上连接超时问题咨询
嘿,我之前在OVH/Kimsufi的独立服务器上部署WebSocket服务时也碰到过几乎一模一样的超时问题,让我帮你一步步梳理排查方向:
虚拟主机本身支持WebSocket,但如果你的服务器用了反向代理(比如Nginx/Apache),或者服务商的防火墙没开对应端口,就会出现连接超时的情况。下面是具体的排查步骤:
1. 优先检查:服务器端口是否对外开放
OVH/Kimsufi的服务器默认有两层防火墙:系统层面的iptables/ufw,还有OVH控制面板里的硬件级网络防火墙,这俩都可能挡住3005端口:
- 先登录OVH后台,找到你的服务器,进入「Network Firewall」页面,添加一条允许TCP 3005端口入站的规则;
- 然后登录服务器终端,执行
sudo iptables -L -n查看系统防火墙规则,如果没有允许3005的条目,添加规则:sudo iptables -A INPUT -p tcp --dport 3005 -j ACCEPT; - 如果你的服务器用了ufw防火墙,直接执行
sudo ufw allow 3005/tcp就行。
2. 验证端口是否真的能被外部访问
端口开放后,从本地测试一下能不能连通:
- 打开终端执行
telnet 你的服务器公网IP 3005,如果显示「Connected」说明端口没问题,要是连不上,那肯定是防火墙还没配置好; - 或者用curl测试:
curl -v ws://你的服务器IP:3005,看输出里有没有连接成功的提示。
3. 如果用了Nginx/Apache做虚拟主机,必须配置WebSocket转发
如果你在服务器上配置了虚拟主机(比如用Nginx托管网站,同时想把WebSocket请求转发到3005端口),默认的反向代理配置不会处理WebSocket的升级请求,必须加专门的规则:
Nginx配置示例(加到你的虚拟主机server块里):
location / { proxy_pass http://localhost:3005; # 关键:启用HTTP/1.1,支持WebSocket升级 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; }
Apache配置示例:
先启用mod_proxy和mod_proxy_wstunnel模块,然后添加:
ProxyPass /ws ws://localhost:3005 ProxyPassReverse /ws ws://localhost:3005
配置完记得重启Nginx/Apache,这样WebSocket请求才能正确转发到你的Node服务。
4. 顺便提个服务端代码的小bug
虽然这不是超时的原因,但你的代码里有个小问题:console.log(data)里的data没定义,应该改成console.log(message),不然客户端发消息时服务端会报错,可能导致后续连接异常。
5. 最后确认客户端连接地址
确保客户端用的ws://------.---:3005里的域名/IP是服务器的公网地址,而且域名已经正确解析到服务器IP,别用内网地址或者没解析的域名。
按照这些步骤排查下来,大概率能解决超时问题,我当时就是OVH的硬件防火墙没开端口导致的,开了之后立刻就通了!
内容的提问来源于stack exchange,提问作者B3ND3L

