workerman 与 nginx/php-fpm 必须分端口、分路径、分角色部署,前者为常驻 tcp 服务(如监听 2346),后者通过 fastcgi 处理传统 http 请求;websocket 场景下 nginx 需透传 upgrade 头、启用 http/1.1、终止 tls,并配置 x-real-ip 以获取真实客户端 ip。

Workerman 和 Nginx/PHP-FPM 不能共用同一套请求处理链路——它俩根本不在一个通信模型里。Workerman 是常驻内存的 TCP 服务,不走 PHP-FPM 的 FastCGI 协议;而 Nginx 转发给 PHP-FPM 的是 fastcgi_pass,转发给 Workerman 的必须是 proxy_pass。混用或试图让 PHP-FPM 去调用 Workerman 进程,只会返回 502 或直接超时。
Workerman 和 PHP-FPM 必须分端口、分路径、分角色部署
常见错误是把 Workerman 当成普通 PHP 脚本塞进 /var/www/html,然后指望 Nginx 的 location ~ \.php$ 规则能把它跑起来。不行。Workerman 启动后监听的是纯 TCP 端口(比如 2346),不是 CGI 接口。
- PHP-FPM 负责处理传统 HTTP 请求:
index.php、表单提交、API 接口(非长连接)等 - Workerman 负责 WebSocket、长连接推送、TCP/UDP 自定义协议等实时场景
- Nginx 用不同
location区分流量:比如location /api/→ PHP-FPM,location /ws/→ Workerman - 两者共享域名和证书,但绝不共享进程、不共享
SCRIPT_FILENAME等 FastCGI 参数
WebSocket 场景下,Nginx 必须透传 Upgrade 头且终止 TLS
前端连的是 wss://domain.com/ws/,但 Workerman 只能监听 ws://127.0.0.1:2346。中间这层协议升级和加密解密,全靠 Nginx 完成。漏配任意一项,浏览器控制台就会报 failed: Error during WebSocket handshake: Unexpected response code: 400。
-
proxy_http_version 1.1必须显式设置,否则 Nginx 默认用 HTTP/1.0,压根不传Upgrade头 -
proxy_set_header Upgrade $http_upgrade:把客户端带的Upgrade: websocket原样透传过去 -
proxy_set_header Connection "upgrade":告诉 Nginx 自己要升为 WebSocket 连接,不是普通 HTTP -
ssl_certificate和ssl_certificate_key必须配置在 server 块里,WSS 的 TLS 终止只能由 Nginx 做,Workerman 不支持ssl://监听
安全通信的关键其实是隔离与最小权限
所谓“安全通信”,不是给 Workerman 加个 HTTPS 就完事。真正的风险点在边界:外部请求是否被误导向、内部服务是否暴露、数据是否混淆校验。
- Workerman 进程必须用非 root 用户运行(如
www-data或自建workerman用户),禁止sudo php start.php start -d - Nginx 的
proxy_pass目标地址写死为127.0.0.1:2346,不要用域名或公网 IP,防止 SSRF 或内网探测 - PHP-FPM 和 Workerman 之间若需交互(比如登录成功后推消息),走内部 HTTP API 或 Redis 通知,不要直连对方端口或共享内存
- 所有从 WebSocket 收到的
$data,必须做 JSON 解析校验 + 字段白名单过滤,不能直接eval()或拼 SQL - 如果 PHP-FPM 项目有上传功能,Workerman 的 WebSocket 服务绝不能开放文件写入权限,二者文件目录严格分离
最易被忽略的一点:Workerman 的 onMessage 回调里,$connection->getRemoteIp() 在 Nginx 代理后默认是 127.0.0.1。你得在 Nginx 配置里加 proxy_set_header X-Real-IP $remote_addr,再在 Workerman 代码里手动读 $connection->header['x-real-ip']——这个头不会自动注入到连接对象,得自己解析。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











