nginx 与 workerman 5.2.3 协同工作:nginx 处理 http 入口,workerman 独立运行长连接服务,通过反向代理或端口分离共存;需确保 php ≥7.4、启用 pcntl/posix 扩展,workerman 监听独立端口(如 2346),nginx 配置 proxy_pass 转发特定路径并设置 websocket 升级头。

要在 Nginx 服务器上配套安装 Workerman 5.2.3,核心不是“让 Nginx 运行 Workerman”,而是让两者协同工作:Nginx 负责 HTTP 流量入口(静态资源、登录页、API 接口),Workerman 独立运行长连接服务(如客服消息通道),二者通过反向代理或端口分离方式共存。下面分四步讲清楚关键动作。
确认 PHP 环境已就绪
Workerman 是纯 PHP 编写的常驻进程框架,不依赖 Apache/Nginx 启动,但必须满足以下硬性条件:
- PHP 版本 ≥ 7.4(推荐 8.0 或 8.1),不能是 Windows 下的 PHP(pcntl 扩展不可用),生产环境务必使用 Linux
- 已启用 pcntl 和 posix 扩展(缺一不可,否则 Worker 进程无法 fork)
- 可选但强烈建议安装 event 或 libevent 扩展(提升高并发下的 I/O 性能)
验证命令:php -m | grep -E "pcntl|posix|event"。若缺失,需重新编译 PHP 或用包管理器安装对应扩展(如 Ubuntu:`apt install php-pcntl php-posix`)。
单独部署 Workerman 5.2.3 服务
Workerman 不走 Nginx 的 fastcgi 通道,它自己监听 TCP 端口(例如 2346),作为独立后台服务运行:
- 下载 Workerman 5.2.3:
composer create-project workerman/workerman:5.2.3 your-app,或直接解压官方源码包 - 修改启动脚本(如
start.php)中的监听地址为0.0.0.0:2346,确保外部可访问(非 127.0.0.1) - 用
php start.php start -d后台启动,并用ps aux | grep start.php确认进程存活 - 如需守护进程管理,可配合
supervisord或 systemd,避免意外退出
配置 Nginx 反向代理长连接请求
Nginx 不处理 Workerman 的长连接数据,但可以将特定路径(如 /ws 或 /gateway)反向代理过去,同时解决跨域和 HTTPS 终结问题:
- 在 server 块中添加 location,例如:
location /gateway {
proxy_pass http://127.0.0.1:2346;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
} - 务必开启
proxy_http_version 1.1和Upgrade/Connection头,否则 WebSocket 升级失败 - 若前端用的是 GatewayWorker(Workerman 官方分布式方案),则 proxy_pass 应指向 Gateway 的 WebServer 端口(默认 8282)
绕开常见冲突点
很多故障源于混淆了职责边界,注意避开这些典型坑:
- 不要尝试用 PHP-FPM 跑 Workerman 启动脚本——它不是普通 PHP Web 脚本,不能通过 Nginx + fastcgi 执行
-
Nginx 不需要监听 Workerman 端口,也不应把
listen 2346写进 nginx.conf;该端口由 Workerman 自己 bind - 防火墙要放行 Workerman 使用的端口(如 2346、8282、7272),CentOS:`firewall-cmd --add-port=2346/tcp --permanent`
- 若用 Nginx 做负载均衡(多台 Workerman 服务器),需搭配 GatewayWorker 的 Register 服务实现节点自动注册,不能只靠 upstream 轮询











