Nginx架构中Master进程解析配置并分配任务的流程

1次阅读

Nginx 启动时 Master 进程负责解析配置、合并结构、初始化资源并创建 Worker 进程,自身不处理请求;其核心流程为“解析→验证→分发→监管”,确保 Worker 获得一致安全的运行环境。

Nginx 架构中 Master 进程解析配置并分配任务的流程

Nginx 启动时,Master 进程负责读取、解析配置文件,并据此初始化资源、创建 Worker 进程,但它本身不处理网络请求。整个流程围绕“解析→验证→分发→监管”展开,核心目标是为 Worker 提供一致、安全、可执行的运行环境。

配置加载与语法解析

Master 进程启动后,首先调用 ngx_conf_parse() 逐行读取配置文件(默认 nginx.conf),按上下文(如 http、server、location)构建内存中的配置树。它不直接执行指令,而是将每条指令映射到预注册的处理函数(如 ngx_http_core_server()),由这些函数校验参数合法性、合并继承关系(如 location 继承 server 的 root)、并填充对应模块的配置结构体(如 ngx_http_core_srv_conf_t)。

若遇到语法错误(如缺少分号、括号不匹配)或语义错误(如 listen 端口已被占用、ssl_certificate 文件不存在),Master 会立即报错退出,不进入后续阶段。

配置合并与结构固化

配置解析完成后,Master 执行配置合并:主配置块(main context)的设置向下覆盖,server 块继承 main,location 块再继承其父 server。例如,root 指令在 http 块中定义后,未显式重写的 server 或 location 将沿用该值。

此时所有模块的配置结构体已完成初始化和合并,形成一份只读的“运行时配置快照”。该快照被复制到每个即将 fork 的 Worker 进程地址空间中,确保各 Worker 行为一致。

资源初始化与 Worker 创建

Master 在 fork Worker 前,预先完成以下工作:

  • 打开监听套接字(如 0.0.0.0:80),设置 SO_REUSEPORT(若启用)或通过 accept_mutex 协调竞争
  • 初始化共享内存区(shared memory zones),如 limit_req、ssl_session_cache 所需的内存段
  • 加载 SSL 证书和私钥(仅 Master 加载一次,Worker 通过 copy-on-write 共享或重新加载)
  • 根据 worker_processes 指令确定进程数量,调用 fork() 创建对应数目的 Worker 子进程

每个 Worker 进程获得相同的配置快照和已准备好的监听 socket,但独立运行事件循环,互不阻塞。

Master 的持续监管职责

Worker 启动后,Master 并不退出,而是转入事件循环,监听以下信号并响应:

  • SIGHUP:重新加载配置——重新执行上述解析→合并→初始化流程,平滑启动新 Worker,逐步关停旧 Worker(graceful shutdown)
  • SIGUSR2:热升级二进制文件——先 fork 新 Master,再由新 Master 启动新 Worker,旧 Master 继续管理旧 Worker 直至其自然退出
  • SIGTERM/SIGINT:快速停止——向所有 Worker 发送 SIGTERM,等待其退出后自身退出
  • SIGQUIT:优雅停止——向 Worker 发送 SIGQUIT,允许其处理完当前连接再退出

Master 不参与请求处理、日志写入或超时管理,仅作为配置中枢与生命周期控制器存在。

text=ZqhQzanResources