浅谈Nginx服务器的内部核心架构设计

前言
Nginx 是一个 免费的  ,  开源的  ,  高性能 的 HTTP 服务器和 反向代理  , 以及 IMAP / POP3代理服务器 。Nginx 以其高性能 , 稳定性 , 丰富的功能 , 简单的配置和低资源消耗而闻名 。Nginx 是一个 Web 服务器 , 也可以用作 反向代理  ,  负载均衡器 和 HTTP 缓存  。
很多高知名度的网站都使用 Nginx  , 如: Netflix  ,  GitHub  ,  SoundCloud  ,  MaxCDN 等 。

浅谈Nginx服务器的内部核心架构设计

文章插图
 
正文
1. Nginx的整体架构
浅谈Nginx服务器的内部核心架构设计

文章插图
 
1.1. 主进程
Nginx 启动时 , 会生成两种类型的 进程 * , 一个是 主进程 ( master ) ,  一个 ( windows版本的目前只有一个)或 多个工作进程 ( worker ) 。 主进程 并不处理网络请求 , 主要负责 调度工作进程  , 也就是图示的 3 项: 加载配置 、 启动工作进程 及 非停升级  。所以 ,  Nginx 启动以后 , 查看操作系统的进程列表 , 我们就能看到 至少有两个 Nginx 进程 。
1.2. 工作进程
服务器实际 处理网络请求 及 响应 的是 工作进程 ( worker ) , 在类 unix 系统上 ,  Nginx可以配置 多个 worker  , 而每个 worker 进程 都可以同时处理 数以千计 的 网络请求  。
1.3. 模块化设计
Nginx 的 worker 进程 , 包括 核心 和 功能性模块  ,  核心模块 负责维持一个 运行循环 ( run-loop ) , 执行网络请求处理的 不同阶段 的模块功能 , 比如: 网络读写 、 存储读写 、 内容传输 、 外出过滤  , 以及 将请求发往上游服务器 等 。而其代码的 模块化设计  , 也使得我们可以根据需要对 功能模块 进行适当的 选择 和 修改  , 编译成具有 特定功能 的服务器 。
1.4. 事件驱动模型
基于 异步及非阻塞 的 事件驱动模型  , 可以说是 Nginx 得以获得 高并发 、 高性能 的关键因素 , 同时也得益于对 linux 、 Solaris 及类 BSD 等操作系统内核中 事件通知 及 I/O 性能增强功能 的采用 , 如 kqueue 、 epoll 及 event ports。
1.5. 代理(proxy)设计
代理设计 , 可以说是 Nginx 深入骨髓的设计 , 无论是对于 HTTP  , 还是对于 FastCGI 、 Memcache 、 redis 等的网络请求或响应 , 本质上都采用了 代理机制  。所以 ,  Nginx 天生就是高性能的 代理服务器  。
2. Nginx的模块化设计
高度模块化的设计是 Nginx 的架构基础 。Nginx 服务器被分解为 多个模块  , 每个模块就是一个 功能模块  , 只负责自身的功能 , 模块之间严格遵循 “高内聚 , 低耦合” 的原则 。
浅谈Nginx服务器的内部核心架构设计

文章插图
 
2.1. 核心模块
核心模块是 Nginx 服务器正常运行 必不可少 的模块 , 提供 错误日志记录 、 配置文件解析、 事件驱动机制 、 进程管理 等核心功能 。
2.2. 标准HTTP模块
标准 HTTP 模块提供 HTTP 协议解析相关的功能 , 比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等 。
2.3. 可选HTTP模块
可选 HTTP 模块主要用于 扩展 标准的 HTTP 功能 , 让 Nginx 能处理一些特殊的服务 , 比如: Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等 。
2.4. 邮件服务模块
邮件服务模块主要用于支持 Nginx 的 邮件服务  , 包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持 。
2.5. 第三方模块
第三方模块是为了扩展 Nginx 服务器应用 , 完成开发者自定义功能 , 比如: Json 支持、 Lua 支持等 。
3. Nginx的请求方式处理


推荐阅读