Nginx 配置热加载通过 master 进程接收 SIGHUP 信号后校验配置、原子替换文件、fork 新 worker 并优雅退出旧 worker 实现,全程毫秒级且不中断服务。
Nginx 的配置快速加载不是靠“实时刷新”或“动态修改”,而是通过进程更替实现的逻辑替换——整个过程通常在毫秒级完成,且不中断服务。
Master 进程全权负责配置解析与分发
只有 master 进程会真正读取、校验并解析 nginx.conf:
SIGHUP 信号后,master 先检查新配置语法是否合法; QUIT 信号。配置文件更新依赖原子性替换
为避免 worker 读到损坏或中间态配置:
nginx.conf.new); mv nginx.conf.new nginx.conf 完成原子重命名(底层是 rename() 系统调用); Worker 进程无锁、只读、完全隔离
每个 worker 在启动时已从 master 继承一份完整配置副本:
轻量协调机制防止并发 reload
为避免多个 reload 同时触发导致状态混乱:
nginx.pid.lock); O_CREAT | O_EXCL 标志保证创建操作原子,成功即获得排他执行权; 不复杂但容易忽略。