Workerman外网无法访问是因为默认监听127.0.0.1,仅限本机;应将$worker->listen地址改为'0.0.0.0:2345'实现IPv4全局监听。

Workerman监听地址没绑对,外网根本连不上
Workerman默认用 127.0.0.1 监听,这意味只接受本机请求——你从手机、另一台电脑或公网IP访问时,连接直接被拒绝,不是端口没开,是根本没监听那个网卡。
实操建议:
- 把
$worker->listen的地址从'127.0.0.1:2345'改成'0.0.0.0:2345'(IPv4 全局监听)或(IPv6 + IPv4 双栈)</li> <li>确认代码里没写死 <code>127.0.0.1
,比如new Worker('text://127.0.0.1:8080')→ 必须改成new Worker('text://0.0.0.0:8080') - 改完重启 Workerman:先
php start.php stop,再php start.php start;热重载不生效
云服务器安全组/防火墙拦住了端口
即使 Workerman 监听了 0.0.0.0,阿里云、腾讯云、AWS 的安全组默认只放行 22/80/443,你自定义的端口(比如 2345 或 8080)必须手动加白名单。
常见错误现象:
- 本地
curl 127.0.0.1:2345成功,但用公网IPcurl http://你的IP:2345超时 -
telnet 你的IP 2345显示 “Connection refused” 或卡住不动
实操建议:
- 登录云控制台 → 找到对应 ECS 实例 → 进入「安全组」→ 编辑「入方向规则」→ 添加一条:协议类型 TCP,端口范围填你的端口号(如
2345或8080-8090),源 IP 建议设为0.0.0.0/0(测试用),生产环境应限制来源 IP 段 - 别漏掉系统级防火墙:CentOS 7+ 检查
firewalld:sudo firewall-cmd --list-ports,没看到你的端口就加:sudo firewall-cmd --add-port=2345/tcp --permanent && sudo firewall-cmd --reload
Workerman启动用户权限不够,绑定不了低端口
Linux 下,1024 以下端口(如 80、443)只能由 root 启动绑定。如果你用普通用户跑 php start.php start 却想监听 80,Workerman 会静默失败或报错 Permission denied,进程可能假死或无法响应。
实操建议:
- 开发阶段直接用
8080、9501这类高端口,避开权限问题 - 生产要用
80/443?别让 Workerman 直接绑:用 Nginx 做反向代理,Nginx 以 root 启动监听80,再把请求转发给 Workerman 的0.0.0.0:9501 - 检查是否真失败:运行
php start.php status看状态;再用netstat -tlnp | grep :80确认有没有进程在监听
Workerman配置了SSL但没传证书路径,HTTPS访问直接断连
如果启用了 SSL(比如用 ssl://0.0.0.0:443),但没正确设置 context 中的 ssl_cert_file 和 ssl_key_file,Workerman 启动时不报错,但任何 HTTPS 请求都会在 TLS 握手阶段失败,浏览器显示“ERR_SSL_PROTOCOL_ERROR”或空白页。
实操建议:
- 确保证书路径是绝对路径,且 PHP 进程有读取权限:
/home/www/ssl/fullchain.pem,不能写相对路径如./cert.pem - 检查文件权限:
ls -l /home/www/ssl/,确认.pem文件对运行 Workerman 的用户(如www-data或nginx)可读 - 验证证书有效性:
openssl x509 -in /path/to/cert.pem -text -noout,避免用错中间证书或私钥格式不对
0.0.0.0 还连不上?立刻去查安全组和 netstat,别在代码里反复打日志。










