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 为例,大致流程:

  1. 客户端与 Nginx 建立 TCP 连接。
  2. 如果是 HTTPS,先完成 TLS 握手。
  3. Worker 读取请求行和请求头,解析 method、URI、Host、headers。
  4. 根据 listen + server_name 选择目标 server
  5. 根据 URI 匹配 location
  6. 按阶段执行 rewrite、access、content、log 等处理。
  7. 从本地文件、缓存或后端应用生成响应。
  8. 写 access log / error log。

reload 为什么比较优雅

执行:

nginx -s reload

大致发生:

Master 读取新配置
检查语法是否合法
启动新 worker
让旧 worker 处理完现有连接后退出

这也是 Nginx 能平滑重载配置的重要原因。

常见心智模型

可以把 Nginx 分成五层理解:

  1. 连接处理器:管理大量网络连接。
  2. 协议解析器:理解 HTTP / TLS / HTTP2。
  3. 路由器:server_namelocationupstream
  4. 流量治理器:缓存、限流、超时、重写、Header 改写。
  5. 边界层:站在用户与应用之间,承担统一入口和故障隔离。
创建于 2026/5/7 更新于 2026/5/27