webman自身无负载均衡能力,必须由nginx反向代理实现;upstream块须置于http{}顶层,proxy_pass须无斜杠引用且匹配名称,weight仅在轮询下有效,算法切换需预定义多upstream配合map。

Webman 本身不内置负载均衡能力,所有流量分发必须由 Nginx(或 HAProxy)这类反向代理层完成。直接在 Webman 进程间做“软负载”不可行,也违背其单进程 + EventLoop 的设计初衷。
upstream 块必须写在 http {} 内,且被 server 引用
很多人改了 upstream 却没生效,根本原因是配置位置错了。Nginx 不会自动扫描子配置文件里的 upstream,它只认 http 块直系子级定义。
-
phpEnv 用户:打开面板里“Nginx → 配置文件”,确认你编辑的是真正被加载的
nginx.conf或vhost/*.conf—— 若配置拆在vhost目录,upstream必须放在该.conf文件顶部(http块内),不能塞进server或location - Linux 系统用户:统一写在
/etc/nginx/nginx.conf的http { ... }中最稳妥,避免路径引用混乱 - Webman 多实例端口必须错开:比如
8383、8484、8585,否则启动时会报Address already in use
proxy_pass 结尾斜杠决定路径是否被截断
这是 Webman 用户踩坑最多的一处。Webman 路由依赖完整 URI(如 /api/v1/user),一旦路径被砍掉,就会 404。
- 正确写法:
proxy_pass http://webman;(结尾无斜杠)→ 原始请求路径完整透传 - 错误写法:
proxy_pass http://webman/;(结尾有斜杠)→location /匹配前缀被移除,/api/v1/user变成api/v1/user,Webman 找不到路由 - 如果用了
location ^~ /api/这类带前缀的匹配,且后端 Webman 实际监听根路径,则必须用无斜杠写法,并确保 Webman 的config/server.php中'app_path'和路由注册方式与之对齐
weight 只在轮询模式下有效,least_conn 和 ip_hash 会忽略它
Nginx 明确禁止在 least_conn 或 ip_hash 块中使用 weight 参数,reload 时会报 invalid parameter "weight" 错误。
- 要按能力分流量:用
round robin(默认)+weight,例如新机器server 127.0.0.1:8383 weight=5;,旧机器server 127.0.0.1:8484 weight=2; - 要保 WebSocket 长连接会话:必须用
ip_hash;,但此时所有weight、max_fails仍可设(只是权重失效),且需搭配health_check主动探测,否则节点宕机后用户会持续失败 - 要扛秒杀类短连接洪峰:选
least_conn;,它不看权重,只看当前活跃连接数,能快速避开已满载的 Webman 实例
热切换算法靠 map + 多 upstream,不是改一行指令
Nginx 不支持运行时修改 upstream 块内的算法关键字(如把 ip_hash 改成 least_conn)。真要动态切,得提前定义多个 upstream 块,再用 map 控制变量路由。
- 定义两个 upstream:
upstream webman_rr { server 127.0.0.1:8383; server 127.0.0.1:8484; }和upstream webman_lc { least_conn; server 127.0.0.1:8383; server 127.0.0.1:8484; } - 加 map 规则:
map $http_x_mode $upstream_name { "lc" "webman_lc"; "rr" "webman_rr"; default "webman_rr"; } - 在 location 中用:
proxy_pass http://$upstream_name; - 切换只需改请求头
X-Mode: lc,无需 reload,但注意map只在请求进入时计算一次,不适合每秒万级突变场景
百万级流量不是靠堆算法,而是靠健康检查灵敏度、keepalive 连接复用、以及 Webman 自身的连接池和协程调度配合。最容易被忽略的是:Webman 实例的 worker_num 和 task_worker_num 必须根据 CPU 核心数调优,否则 Nginx 再均衡,后端也卡在单核打满上。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











