weight=0 的节点不会接收请求且不参与健康检查;需验证配置语法、重载状态、日志无匹配记录,并排除 backup/down 冲突或 upstream 多处引用问题。

权重为 0 的节点不会接收任何新请求,这是 Nginx 的明确行为——weight=0 表示该 server 被临时摘除,既不参与调度,也不触发健康检查。但排查是否“真没流量”,不能只看配置,得验证实际行为。
确认配置中 weight=0 是否生效
检查 upstream 块中对应 server 行是否严格写成:
server 10.0.1.10:8080 weight=0;
注意以下常见误写会导致 weight=0 失效:
- 多写了空格或不可见字符,如
weight = 0(Nginx 会忽略整条指令) - 混用了其他指令,如
server ... weight=0 backup;(backup 优先级高于 weight=0,该节点可能在主节点全 down 时被启用) - 该 server 行被注释符号
#错误包裹,实际未加载
查 access 日志确认无请求打到该 IP:端口
在 Nginx 配置中启用带 upstream 地址的日志格式:
- 在 http 块添加:
log_format upstream_log '$remote_addr - $upstream_addr [$time_local] "$request" $status'; - 在 location 中启用:
access_log /var/log/nginx/upstream.log upstream_log;
然后发起一批请求(建议 ≥20 次),再执行:
grep "10\.0\.1\.10:8080" /var/log/nginx/upstream.log若返回为空,说明该节点确实未收到请求;若有匹配行,说明 weight=0 未生效或配置未重载。
检查 Nginx 进程是否已重载配置
修改配置后必须重载,否则旧配置仍在运行:
- 执行
nginx -t确认语法正确 - 执行
nginx -s reload或systemctl reload nginx - 用
ps aux | grep nginx查看主进程启动时间,确认是否为修改后的时间
排除健康检查干扰导致的“假上线”
weight=0 的节点本就不参与健康检查,但如果配置中错误地加了 max_fails 或 fail_timeout,Nginx 不报错但会忽略这些参数。重点检查:
- 该 server 行是否意外包含
down或backup——它们与 weight=0 共存时,行为以down为准(彻底屏蔽),而backup可能绕过权重逻辑 - 是否存在同名 upstream 被多个 location 引用,而你只改了其中一处?
不复杂但容易忽略











