Nginx 是否以守护进程运行由 daemon 指令控制,是否启用主从架构由 master_process 指令控制;二者独立但共同决定进程行为模式,典型组合包括标准生产、调试、单进程测试及后台单进程等模式。
Master Process 本身不直接决定是否以守护进程方式运行,而是由全局配置指令 daemon 控制;Master Process 的存在与否,则由 master_process 指令控制。二者相互独立,但共同影响 Nginx 的进程行为模式。
daemon 指令决定是否脱离终端
该指令控制 Nginx 是否以传统 Unix 守护进程(daemon)方式启动:
-
daemon on(默认):Master 进程 fork 后,父进程退出,子进程调用
setsid() 创建新会话,完全脱离控制终端,成为后台常驻进程;此时 Master 的父进程变为 init(PID 1)或 systemd
-
daemon off:Nginx 保持在前台运行,Master 进程的父进程仍是启动它的 shell;终端关闭(如 Ctrl+C)会导致整个 Nginx 进程树退出,便于调试和日志实时观察
master_process 指令决定是否启用主从架构
该指令控制是否启用经典的 master-worker 多进程模型:
-
master_process on(默认):Master 进程以 root 权限启动,完成配置校验、监听套接字创建、Worker 派生与监管;Worker 以非特权用户运行,专注处理请求
-
master_process off:禁用 Master,Nginx 以单进程模式运行 —— 此时仅有一个进程,它既做配置加载、信号响应,也直接处理所有网络 I/O 和 HTTP 请求,等效于“无管理者的 worker”
两种指令组合产生的典型运行模式
实际部署中,常见组合及其用途如下:
-
daemon on; master_process on;:标准生产模式 —— 后台守护 + 主从分工,兼顾安全性、稳定性与资源隔离
-
daemon off; master_process on;:调试常用模式 —— 前台可见 + 多进程结构,方便用
gdb 跟踪 Master 或 Worker 行为(需配合 set follow-fork-mode)
-
daemon off; master_process off;:极简单进程模式 —— 无 fork、无权限切换、无进程监管,适合单元测试或嵌入式轻量场景
-
daemon on; master_process off;:少见但合法 —— 后台守护的单进程服务,适用于对进程数有严格限制且无需热重载的环境
Master 在守护模式下的关键动作
当 daemon on 且 master_process on 时,Master 进程在守护化后主要承担以下职责:
- 提前创建并监听所有 socket(bind+listen),再通过 fork 共享给 Worker,避免惊群
- 统一响应外部信号(SIGHUP、SIGUSR2、SIGQUIT 等),协调 Worker 的平滑重启或升级
- 监控 Worker 异常退出,自动拉起新进程维持预设数量(
worker_processes)
- 接管日志写入:Worker 将日志内容通过 pipe 或共享内存提交,由 Master 统一刷盘,减少磁盘竞争