Nginx 架构与请求处理流程
从 master-worker、事件驱动、非阻塞 I/O 到一个 HTTP 请求在 Nginx 中如何被接收、匹配和返回。
#type / synthesis
#status / growing
#tech / ops
#resource / nginx
[!info] related notes
Nginx 架构与请求处理流程
范围
- 这篇笔记关注 Nginx 为什么高性能,以及一个请求在 Nginx 里如何流过。
- 不展开
location细节和proxy_pass规则,这些放到专门配置页里。
为什么要放在一起理解
- 如果只背“反向代理配置”,很容易把 Nginx 理解成一个会转发请求的工具。
- 真正重要的是:它为什么能在高并发下稳定处理大量连接,以及请求是在什么阶段被解析、匹配和返回的。
核心架构
Master 与 Worker
Nginx 通常由两类进程组成:
Master Process
├── Worker Process 1
├── Worker Process 2
├── Worker Process 3
└── Worker Process 4
- Master 进程负责:
- 读取配置
- 启动和管理 worker
- 接收信号
- 平滑 reload
- 日志重开和二进制升级
- Worker 进程负责:
- 接收连接
- 读写 socket
- 处理 HTTP 请求
- 等待新事件
事件驱动与非阻塞 I/O
Nginx 的核心不是“一连接一线程”,而是:
少量 worker 进程 + 非阻塞 I/O + 事件循环
一个 worker 可以同时管理大量连接。Linux 下常依赖 epoll,BSD / macOS 下常见 kqueue。
为什么性能高
- 一个 worker 处理大量连接,避免线程爆炸。
- 非阻塞 I/O 避免因为一个慢客户端或慢后端把整个 worker 卡住。
- worker 数量通常接近 CPU 核数,减少上下文切换。
- 大量使用请求级内存池,减少频繁
malloc/free。 - 静态文件可配合
sendfile on;降低拷贝成本。
一个请求如何流过 Nginx
以 GET /api/users?id=1 HTTP/1.1 为例,大致流程:
- 客户端与 Nginx 建立 TCP 连接。
- 如果是 HTTPS,先完成 TLS 握手。
- Worker 读取请求行和请求头,解析 method、URI、Host、headers。
- 根据
listen+server_name选择目标server。 - 根据 URI 匹配
location。 - 按阶段执行 rewrite、access、content、log 等处理。
- 从本地文件、缓存或后端应用生成响应。
- 写 access log / error log。
reload 为什么比较优雅
执行:
nginx -s reload
大致发生:
Master 读取新配置
检查语法是否合法
启动新 worker
让旧 worker 处理完现有连接后退出
这也是 Nginx 能平滑重载配置的重要原因。
常见心智模型
可以把 Nginx 分成五层理解:
- 连接处理器:管理大量网络连接。
- 协议解析器:理解 HTTP / TLS / HTTP2。
- 路由器:
server_name、location、upstream。 - 流量治理器:缓存、限流、超时、重写、Header 改写。
- 边界层:站在用户与应用之间,承担统一入口和故障隔离。