Workerman在宝塔面板中开放端口仍无法连接,根本原因是服务未真正监听(如绑定127.0.0.1而非0.0.0.0)、防火墙/安全组未同步放行、或Workerman进程未启动;须用ss验证监听、ps查进程、firewall-cmd或iptables配防火墙、云平台安全组单独配置,并确保客户端URL协议与服务端一致。

Workerman在宝塔面板中开放了端口却依然无法连接,通常不是单纯放行端口就能解决的问题——服务监听地址写成127.0.0.1、防火墙规则未生效、云服务商安全组被忽略、或Workerman进程根本没跑起来,这些都可能让客户端收到connection refused或timeout错误。
确认Workerman是否真正监听目标端口
登录服务器SSH终端,执行:
ss -tuln | grep :2346(把2346替换成你实际用的端口)
如果没有任何输出,说明Workerman根本没在监听这个端口。此时不要急着改防火墙,先检查服务是否启动成功。
执行命令 bt查看宝塔面板服务状态,再运行 ps aux | grep workerman 看是否有workerman进程在运行。没有进程,就说明服务压根没起来,可能是PHP报错退出、脚本路径错误或权限不足导致启动失败。
【关键前提:Workerman脚本必须监听0.0.0.0,不能只写127.0.0.1】 如果代码里是 new Worker('websocket://127.0.0.1:2346'),那它只接受本机访问,外网和局域网设备全部连不上。必须改成 'websocket://0.0.0.0:2346' 才能被外部连接。
检查服务器本地防火墙是否真正放行
方法一(firewalld):
firewall-cmd --list-ports | grep 2346 → 若无输出,执行 firewall-cmd --zone=public --add-port=2346/tcp --permanent → firewall-cmd --reload
方法二(iptables):
iptables -L -n | grep 2346 → 若未出现,执行 iptables -I INPUT -p tcp --dport 2346 -j ACCEPT → service iptables save
注意:firewalld和iptables不能同时启用,否则规则会冲突。执行 systemctl status firewalld 和 systemctl status iptables 确认当前使用的是哪一个。
验证云服务商安全组配置
第一步:登录阿里云/腾讯云/华为云控制台,进入对应ECS实例的“安全组”页面。
第二步:找到绑定到该服务器的安全组,点击“配置规则”→“入方向”→检查是否有允许TCP协议、目标端口为2346、授权对象为0.0.0.0/0(或你客户端IP段)的规则。
第三步:若没有,点击“添加安全组规则”,协议类型选TCP,端口范围填2346,授权对象填0.0.0.0/0(测试阶段),保存后等待10秒生效。
这一步最容易被跳过——【宝塔面板放行端口 ≠ 云平台放行端口】,两者缺一不可。
排查客户端连接方式是否匹配
① 检查客户端连接URL是否与服务端协议一致:服务端用 websocket:// 启动,客户端就必须用 ws:// 或 wss://;若服务端是 http://,客户端就不能用 ws://。
② 使用curl或telnet从服务器本机测试连通性:
telnet 127.0.0.1 2346 → 成功说明服务本地可连;
telnet 你的公网IP 2346 → 失败则说明防火墙或安全组仍有拦截。
③ 客户端若用域名连接,先执行 nslookup yourdomain.com 确认解析出的IP确实是你的服务器公网IP,避免DNS指向旧IP或内网IP。


















