Workerman浏览器访问失败主因是请求未抵达进程,需同时检查监听地址(改为0.0.0.0)、系统防火墙(放行端口)和云安全组(配置入方向规则)三层;缺一不可。

Workerman安装后浏览器访问不到,基本不是“没装好”,而是请求压根没抵达 Workerman 进程——curl http://127.0.0.1:2345 能通但浏览器输 http://你的公网IP:2345 失败,说明问题出在监听地址、系统防火墙或云安全组这三层上,缺一不可。
监听地址必须是 0.0.0.0,不能是 127.0.0.1 或 localhost
Workerman 默认示例常写 new Worker('http://127.0.0.1:2345'),这只能响应本机回环流量,外部请求发到服务器真实 IP 时,Linux 内核直接丢弃。
- 打开启动文件(如
start.php或server.php),把所有127.0.0.1、localhost替换为0.0.0.0,例如:new Worker('http://0.0.0.0:2345') - 改完必须完整重启:
php start.php stop && php start.php start;reload不生效,旧监听仍驻留在内核中 - 验证是否生效:运行
ss -tuln | grep :2345,输出里必须含*:2345或0.0.0.0:2345;如果还是127.0.0.1:2345,说明代码没加载或被其他配置覆盖
系统防火墙(firewalld / iptables / ufw)必须放行端口
本地 curl 127.0.0.1:2345 成功 ≠ 外网能连——loopback 流量不经过防火墙,而外网请求必须过这一关。
- 查当前状态:
sudo firewall-cmd --state(CentOS/Rocky/AlmaLinux)或sudo ufw status(Ubuntu) - 放行端口(以 2345 为例):
sudo firewall-cmd --add-port=2345/tcp --permanent && sudo firewall-cmd --reload;Ubuntu 则用sudo ufw allow 2345 - 若 firewalld 未启用,检查 iptables:
sudo iptables -L -n | grep 2345,无结果则加规则:sudo iptables -I INPUT -p tcp --dport 2345 -j ACCEPT,再保存
云服务器安全组是第一道硬拦截,必须手动配
阿里云、腾讯云、华为云等平台的安全组独立于系统防火墙,且入方向默认全部拒绝。即使你开了防火墙、绑了 0.0.0.0,没配安全组照样连不通。
- 登录控制台 → 找到对应 ECS 实例 → 点击「安全组」→ 「配置规则」→ 「入方向」→ 「手动添加」
- 填三项关键内容:
– 协议类型:TCP
– 端口范围:2345/2345(注意格式,不能只写 2345)
– 授权对象:测试阶段填0.0.0.0/0,上线后应严格限制 IP 段 - 保存后等待约 10 秒再测,安全组策略有缓存延迟;别信“已开放”截图,必须进规则列表确认状态为「启用」
浏览器访问失败时,别用浏览器直接试,先 telnet 验证链路
浏览器输 http://ip:2345 报错(如 ERR_CONNECTION_REFUSED、ERR_TIMED_OUT),不代表 Workerman 没响应,可能只是它没返回 HTTP 响应头——比如你启的是 TCP 或 WebSocket 协议,而非 HTTP。
- 在另一台机器(非服务器本机)执行:
telnet 你的公网IP 2345;通了,说明网络层和防火墙/安全组都没问题,问题在协议或业务逻辑 - 如果
telnet不通,立刻停掉所有猜测,回头检查上面三步:监听地址、系统防火墙、云安全组 - 特别注意 WSL、Docker、VirtualBox 场景:宿主机系统防火墙(Windows Defender/macOS Firewall)也会拦截外来连接,临时关闭比反复调试更高效
最容易被忽略的点是:改完监听地址后只 reload,没 stop 再 start;以及以为开了防火墙就等于外网可通,却忘了云安全组是独立存在、必须手动添加的。这两处卡住,90% 的“访问不到”问题就解决了。


















