Workerman端口打不开的首要原因是阿里云安全组未放行,需在安全组入方向添加TCP协议、指定端口范围(如2345/2345)、授权对象为0.0.0.0/0的规则;其次检查系统防火墙(firewalld/ufw)是否放行该端口;最后确认Workerman监听地址为0.0.0.0而非127.0.0.1。

Workerman端口打不开?先确认是不是安全组没放行
阿里云ECS上跑Workerman,明明程序启动成功、netstat -tuln | grep 2345能看到监听,但外网死活连不上——90% 是卡在安全组规则。它不是防火墙,也不是 Workerman 配置问题,而是阿里云在“网关层”就把流量拦了。
- 安全组是 ECS 实例的“虚拟防火墙”,入方向默认全部拒绝,不手动加规则,任何端口对外都是黑的
-
Workerman常用端口如2345、8282、7272等,都不在阿里云默认开放列表里(HTTP/80、HTTPS/443 才预置) - 只配安全组还不够:如果系统启用了
firewalld或ufw,还得在 OS 层再放一次,否则请求连不到 Workerman 进程
怎么在控制台加一条有效的安全组规则
别点错地方——不是在“实例详情页”直接设端口,而是进它绑定的“安全组”里配规则。路径容易走偏,尤其多实例共用一个安全组时,改错了会影响其他服务。
- 登录阿里云控制台 → 左侧【云服务器ECS】→ 找到目标实例 → 点击实例ID进入详情页
- 左侧菜单选【安全组】→ 右侧点【配置规则】(不是“更多→网络和安全组”,那个入口已逐步下线)
- 在【入方向】页签点击【手动添加】,填三项关键内容:
- 协议类型:TCP(Workerman 默认走 TCP)
- 端口范围:2345/2345(不能只写2345,必须是起始/结束格式)
- 授权对象:0.0.0.0/0(全网可访问)或更严格的 IP 段,比如123.123.123.0/24 - 规则生效无需重启 ECS,但保存后建议等 10 秒再测
Linux 系统防火墙也要同步放开
CentOS 7/8、Alibaba Cloud Linux 默认启用 firewalld;Ubuntu 一般用 ufw。安全组开了,系统防火墙没开,照样连不通。
- 查当前状态:
sudo firewall-cmd --state(输出running表示开着) - 放行 Workerman 端口(以
2345为例):
sudo firewall-cmd --zone=public --add-port=2345/tcp --permanent
sudo firewall-cmd --reload - 验证是否生效:
sudo firewall-cmd --query-port=2345/tcp→ 返回yes才算成功 - 如果不想管防火墙,临时关闭也行:
sudo systemctl stop firewalld,但生产环境不建议
测试连通性时别被假象骗了
很多人用 telnet ip 2345 或浏览器直接输 http://ip:2345 测试,结果失败就以为没开成功——其实可能只是 Workerman 没返回 HTTP 响应,或者监听的是 127.0.0.1 而非 0.0.0.0。
- 先确认 Workerman 绑定地址:
php start.php start -d启动后,检查日志或用ss -tuln | grep :2345,看 LISTEN 行是否含*:2345(表示监听所有接口),而不是127.0.0.1:2345 - 从本地终端测连通:
curl -v telnet://your-server-ip:2345或用nc -zv your-server-ip 2345,只要显示 connected 就说明端口通了 - 如果 Workerman 是 WebSocket 服务,浏览器无法直连,得用专门的 WS 客户端(如 wscat)测试
安全组和系统防火墙是两道独立关卡,少过一道都白搭;而 Workerman 自身监听地址配错,会让前面所有操作看起来像失效。三者缺一不可,顺序不能乱。










