You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

前端无法连接非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端口,前端无需指定端口即可连接:

  1. 确保Apache启用了mod_proxy和mod_proxy_wstunnel模块
  2. 在Apache配置文件中添加以下规则:
ProxyPass /ws ws://localhost:39100
ProxyPassReverse /ws ws://localhost:39100
  1. 前端连接代码修改为:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:05:18