前端无法连接非80端口的Node.js WebSocket服务器问题
解决非80端口WebSocket连接失败问题
可能的原因及解决方案
1. 服务器仅绑定本地回环地址
默认情况下,WebSocketServer仅指定port参数时,可能会绑定到127.0.0.1(本地回环地址),导致外部客户端无法访问。修改服务器代码,明确绑定到0.0.0.0(所有网卡地址):
const wss = new WebSocketServer.Server({ port: 39100, host: '0.0.0.0' })
2. 利用Apache反向代理转发WebSocket请求
既然Apache已占用80端口,可以通过配置反向代理,将WebSocket请求转发到39100端口,前端无需指定端口即可连接:
- 确保Apache启用了
mod_proxy和mod_proxy_wstunnel模块 - 在Apache配置文件中添加以下规则:
ProxyPass /ws ws://localhost:39100 ProxyPassReverse /ws ws://localhost:39100
- 前端连接代码修改为:
const ws = new WebSocket("ws://flagduel.com/ws");
3. 验证端口监听状态
在服务器上执行以下命令,确认39100端口确实在监听所有外部地址:
ss -tulpn | grep 39100
如果输出显示127.0.0.1:39100,说明仅本地可访问,需按方案1修改绑定地址。
4. 检查HTTPS页面的安全限制
如果前端页面是通过HTTPS访问的,浏览器会禁止连接未加密的ws://协议(非443端口),此时需要:
- 为WebSocket服务器配置SSL证书,使用
wss://flagduel.com:39100连接 - 或者通过Apache的443端口反向代理WSS请求
内容的提问来源于stack exchange,提问作者komischerkautz
相关产品推荐
相关产品推荐

