Nginx是大型互联网架构的必备中间件,也是大厂经常涉及的关键点,下面我重点详解Nginx工作原理@mikechen
Nginx
Nginx(发音为“Engine-X”)是一款高性能的开源Web服务器软件,同时也广泛用作反向代理、负载均衡器和HTTP缓存服务器。
它由Igor Sysoev于2004年首次发布,设计目标是解决传统Web服务器(如Apache)在高并发场景下的性能瓶颈。
Nginx以其异步非阻塞的事件驱动架构著称,能够高效处理数以万计的并发连接,广泛应用于现代互联网架构中。
Nginx工作原理
Nginx 的核心是 事件驱动 + 异步非阻塞 IO,其运行机制遵循以下原则。
Nginx 的整体架构,可以分为三大核心部分:
1.多进程架构
Master-Worker 多进程模型:启动后由一个 Master 进程,统一管理多个 Worker 子进程。
Master 进程:负责读取配置、管理 Worker 进程、响应控制命令(如 reload、stop);
Worker 进程:负责处理客户端请求,一个 Worker 可同时处理多个连接;
每个 Worker 独立处理请求,互不干扰,采用 epoll 事件机制监听连接;
2. 事件驱动模型
基于操作系统的高效 IO 事件通知机制(Linux 下为 epoll);
利用事件循环处理连接的可读、可写、超时等事件;
内部采用 Reactor 模式, 进行模块解耦与异步调度。
3. 模块化设计
核心功能通过模块加载实现,分为:
核心模块(如 http、event、mail);
功能模块(如 proxy、rewrite、gzip、ssl);
第三方模块(如 Lua、RTMP、OpenResty 插件)。
Nginx工作流程
Nginx工作流程,如下图所示:
1.启动阶段
-
Master 进程加载配置文件;
-
初始化所需资源(监听端口、缓存目录、日志文件等);
-
派生多个 Worker 进程。
2. 等待连接
-
Worker 进程监听事件循环(如 epoll_wait);
-
当有客户端连接时,从监听套接字 accept 新连接。
3. 请求处理阶段
-
读取并解析 HTTP 请求报文;
-
匹配 location 配置;
-
根据配置决定请求处理方式(如静态文件、本地 FastCGI、反向代理到上游等);
-
可进行 rewrite、重定向、认证、限速、缓存、压缩等处理。
4. 响应构造与输出
-
将响应数据写入缓存或直接读取文件;
-
利用 sendfile 零拷贝输出到网络;
-
支持响应缓存控制(如 Cache-Control、ETag)和 gzip 压缩。
5. 连接关闭
-
根据配置决定是否开启 keepalive 长连接;
-
释放资源、关闭连接或继续复用连接。