nginx master process 不动态调整 worker 数量,仅固定启动并响应信号;真正的负载自适应依赖连接分发层削峰、集群级弹性分担和可观测性驱动的外部伸缩。

Nginx 的 Master Process 本身不根据负载动态调整 worker 进程数量,它不会像应用服务器那样自动扩缩容。它的核心职责是管理、监控和信号转发,而非实时响应流量变化。
真正起作用的“动态适应”,是通过以下方式协同实现的:
Master Process 的实际行为与限制
- 启动时 fork 出固定数量的 worker 进程(由
worker_processes决定),此后不再创建或销毁 worker 进程 - 不感知请求量、连接数或 CPU 使用率等运行时指标
- 仅在收到
SIGHUP(reload)、SIGUSR2(升级)等信号时,才启动新 worker 并优雅关闭旧 worker——这仍是人工或外部触发,非自动负载驱动
真正实现“负载自适应”的三类关键机制
这些不是 Master 自己做的,而是靠配置策略 + 外部协同 + 集群设计来达成效果:
-
连接分发层的削峰设计
- 启用
accept_mutex on(默认开启),避免惊群,让连接更均匀落到各 worker - 关闭
multi_accept,使每个 worker 逐个接收新连接,天然缓解瞬时高峰冲击 - 设置足够大的内核队列:
net.core.somaxconn = 65535,为 Nginx 争取缓冲时间
- 启用
-
集群级弹性分担
- 负载均衡器(如另一层 Nginx 或云 LB)使用
least_conn或random two_choices策略,把新请求导向当前连接最少的后端节点 - 所有 Nginx 实例统一启用
worker_cpu_affinity auto,确保资源绑定正确,避免错配浪费
- 负载均衡器(如另一层 Nginx 或云 LB)使用
-
可观测性驱动的外部伸缩
- 暴露
/nginx_status(stub_status),采集Active connections、Reading/Writing/Waiting等指标 - 将指标接入 Prometheus + Grafana,设置阈值告警(例如
Active connections > 80% of worker_connections × worker_processes) - 通过 Kubernetes HPA 或运维脚本触发扩容:新建 Nginx Pod / 重启服务 / 更新 upstream 列表
- 暴露
不复杂但容易忽略的是:Master Process 是稳定的控制中枢,不是智能调度器。所谓“动态调整”,本质是把负载感知、决策和执行交给外围系统,Nginx 本身保持轻量、确定、可预测。











