Nginx 高可靠性源于主从分工、进程隔离与自动恢复:主进程仅调度不处理请求,worker 进程相互独立、崩溃互不影响,异常时毫秒级重启,热重载失败自动回退。

靠的是主从分工、进程隔离和自动恢复——不是不让出错,而是让错误关在“单间”里,不影响别人。
主进程只管调度,不碰请求
主进程以 root 权限运行,但只做四件事:读配置、绑定端口、拉起/监控 worker 进程、响应信号(如 reload、stop)。它不处理任何网络连接,不解析 HTTP,不读磁盘,也不跑 Lua 脚本。代码路径极短,几乎不会崩溃;即使异常退出,重启开销极小,且正在运行的 worker 进程完全不受干扰。
每个 worker 独立运行,内存与状态不共享
每个 worker 是操作系统级独立进程,拥有自己的内存空间、文件描述符、连接队列、缓冲区和定时器。默认情况下,worker 之间不共享可写堆内存(除 limit_req、limit_conn 等少数需协同模块外):
- 一个 worker 因正则回溯、后端超时或内存分配失败而崩溃,仅终止自身,其他 worker 继续响应请求
- 慢请求、长连接或大文件传输卡在一个 worker 中,不会阻塞其他 worker 接收新连接
- 限流、缓存淘汰、连接超时等逻辑都在单个进程内闭环完成,无需加锁,避免死锁和竞争风险
崩溃后毫秒级自动补位
主进程持续监听 worker 存活状态,一旦检测到异常退出(如 SIGSEGV、被 OOM Killer 终止),会立即 fork 新进程替代:
- 日志中仅记录类似 worker process XXX exited on signal 11 的信息
- 用户请求几乎无感知,已有连接由原 worker 继续处理直至自然关闭
- 配合 worker_rlimit_core 和 working_directory 可为每个 worker 单独设置 core dump 路径,便于定位具体崩溃原因
热重载自带容错兜底
执行 nginx -s reload 时,主进程先校验新配置语法:
- 校验通过 → 启动新 worker,通知旧 worker 优雅退出(不再 accept 新连接,但处理完已有请求)
- 校验失败 → 拒绝加载新配置,旧 worker 继续运行,服务保持原状
- 这个“拒绝即回退”的机制,本身就是最实用的容错防线


















