NGINX 实现架构
高性能 Web 服务器 / 反向代理 — 核心架构全景
整体模块架构
请求处理流程
Master-Worker 进程模型
内存与连接管理
关键设计说明
🌐 事件驱动模型
NGINX 不使用线程处理每个连接,而是通过 epoll (Linux) / kqueue (BSD/macOS) 等系统调用实现异步 I/O 多路复用。一个 Worker 进程可同时处理数千个连接,内存开销极低。
⚡ 零拷贝 (Zero Copy)
使用 sendfile() 系统调用直接在内核空间将文件数据从磁盘发送到网卡,避免用户态缓冲区的数据拷贝,大幅提升静态文件传输性能。
🔄 热重载机制
Master 进程收到 SIGHUP 后重新读取配置,fork 新 Worker 进程并逐步接管旧连接,旧 Worker 在处理完存量请求后自动退出,实现零停机配置更新。
🧩 模块化设计
NGINX 的核心只负责事件调度和基础框架,所有功能(代理、缓存、压缩、SSL、限流等)都以模块形式挂载。HTTP 处理链由 11 个 Phase 按序执行,各 Phase 可注册多个 handler。
🧠 内存池管理
每个请求创建独立内存池,所有内存从池中分配,请求结束时整体释放。消除了内存碎片和内存泄漏问题,分配开销近似于栈分配。
📊 Slab 分配器
共享内存使用 slab 分配器管理,将内存页按固定大小(8B/16B/32B/...)划分为 slab,避免小块内存的碎片问题。用于共享数据如 limit_req 计数器、SSL session 等。