必须修改端口,否则多个Webman实例因默认监听0.0.0.0:8787会触发Address already in use错误;需编辑config/server.php中'port'值为唯一空闲端口(如8383、8484),并用lsof或netstat检查,同时Nginx upstream中server地址须对应更新。

webman 多实例启动必须改端口
不改端口直接跑多个 webman 实例会报 Address already in use 错误,因为默认监听 0.0.0.0:8787。每个实例必须绑定唯一端口,否则进程起不来。
修改方式:编辑对应项目的 config/server.php,找到 'port' => 8787 这一行,改成未被占用的端口,比如 8383、8484、8585 等:
return [
'host' => '0.0.0.0',
'port' => 8383, // ← 必须改!不能重复
];- 建议用
lsof -i :8383或netstat -tuln | grep 8383检查端口是否空闲 - 开发环境可按项目名编号(如
webman-api-1→8383,webman-api-2→8484)便于识别 - 不要用
127.0.0.1替代0.0.0.0,否则 Nginx 从本机反向代理时可能连不上(尤其 Docker 或跨网卡场景)
upstream 块里 server 的 weight 和 max_fails 怎么设
权重不是“越高越好”,得结合后端机器的实际 CPU、内存、磁盘 I/O 综合判断。盲目设高 weight 可能导致单点过载,反而拖垮整体响应。
常见配置示例(两台同配置服务器):
upstream webman {
server 127.0.0.1:8383 weight=3 max_fails=3 fail_timeout=20s;
server 127.0.0.1:8484 weight=4 max_fails=3 fail_timeout=20s;
keepalive 10240;
}-
weight建议从1起步,逐步调高;差值控制在1~3内较稳妥(如3和4),避免流量倾斜失控 -
max_fails=3表示连续 3 次健康检查失败才摘除节点;fail_timeout=20s是摘除后 20 秒内不再转发请求 -
keepalive 10240是连接池大小,对 webman 这类长连接友好的框架很关键,能显著降低 TCP 握手开销
location / {} 里 proxy_pass 后面不能带路径
这是最常踩的坑:proxy_pass http://webman/ 结尾多了一个 /,会导致 URL 重写异常——比如访问 /api/user,可能被错误转发成 http://webman/api/user(正确),也可能变成 http://webman//api/user(双斜杠)或丢失前缀。
正确写法只有两种:
- 不带尾部斜杠:
proxy_pass http://webman;(推荐,语义清晰) - 带路径重写:
location /api/ { proxy_pass http://webman/; }(注意这里proxy_pass末尾有/,且location也以/结尾,Nginx 才会自动剥离前缀)
webman 默认路由是根路径,所以主 location / 块里务必用无尾斜杠写法。
Webman + Nginx 需要透传 X-Forwarded-* 头吗
需要,而且必须显式配置。webman 默认不信任代理头,若不传 X-Real-IP 和 X-Forwarded-For,$request->ip() 拿到的永远是 127.0.0.1;日志、限流、白名单都会失效。
在 server 块的 location 内加上这几行:
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host;
-
$proxy_add_x_forwarded_for比$remote_addr更安全,它会追加而非覆盖原始 IP 链 - 如果用了 HTTPS,
X-Forwarded-Proto能让 webman 正确生成跳转链接(避免混合内容或 302 到 http) - 别漏掉
Host头,否则 webman 的 URL 生成、CORS 判断可能出错
真正麻烦的不是配多少行,而是改完 nginx.conf 后忘记 nginx -t 测试再 nginx -s reload;更隐蔽的是 webman 实例没加 --daemon 就丢后台,一重启就消失。这些细节比算法本身更决定集群能不能稳住。


















