Nginx 源码结构分析
Nginx 源码基本结构
学习 Nginx 的构架之前,对 Nginx 源码结构进行简单的分析,可以了解 Nginx 模块结构以及模块之间的关系。充分理解Nginx 的基本构架。解压源码到相应的文件后,我们可以看到有一个存放源码的目录文件src,该目录文件存储Nginx 所有的源代码。首先,我们通过命令查看源码的组织结构:
$ tree -L 1
.
├── core
├── event
├── http
├── mail
├── misc
└── os
6 directories, 0 files
输出结果显示有 6 个目录文件,以下是这些目录文件的功能:
core :Nginx的核心源代码,包括常用数据结构的以及Nginx 内核实现的核心代码;
event:Nginx事件驱动模型,以及定时器的实现相关代码;
http :Nginx 实现http 服务器相关的代码;
mail :Nginx 实现邮件代理服务器相关的代码;
misc :辅助代码,测试C++头 的兼容性,以及对Google_PerfTools 的支持;
os :不同体系统结构所提供的系统函数的封装,提供对外统一的系统调用接口;
下面主要针对重要的三个目录进行简单的介绍:core 目录、http 目录、event 目录;
core 核心模块结构
core 目录中的源码定义了 Nginx 服务器最基本的数据结构以及最基本的核心模块(核心模块为其他模块提供了公共调用的基本功能)。首先看下该核心模块的源码结构:
event 事件驱动模型结构
event 目录里面包含一种子目录 module 以及一些文件,除了 module 子目录,其他文件提供了事件驱动模型相关数据结构的定义、初始化、事件接收、传递、管理功能以及事件驱动模型调用功能。module 子目录里面的源码实现了Nginx 支持的事件驱动模型:AIO、epoll、kqueue、select、/dev/poll、poll 等事件驱动模型;
http 模块结构
http 目录和 event 目录一样,通用包含了模块实现源码的 module 目录文件以及一些结构定义、初始化、网络连接建立、管理、关闭,以及数据报解析、服务器组管理等功能的源码文件。module 目录文件实现了HTTP 模块的功能。
Nginx 源码的模块化结构
根据各模块的功能,可把 Nginx 源码划分为以下几种功能,如下图所示:
核心模块功能:为其他模块提供一些基本功能:字符串处理、时间管理、文件读写等功能;
配置解析:主要包括文件语法检查、配置参数解析、参数初始化等功能;
内存管理:内存池管理、共享内存的分配、缓冲区管理等功能;
事件驱动:进程创建与管理、信号接收与处理、所有事件驱动模型的实现、高级 IO 等功能;
日志管理:错误日志的生成与管理、任务日志的生成与管理等功能;
HTTP 服务:提供 Web 服务,包括客户度连接管理、客户端请求处理、虚拟主机管理、服务器组管理等功能;
Mail 服务:与 HTTP 服务类似,但是增加了邮件协议的实现;
Last updated
Was this helpful?