涉及内容
- Nginx服务器源码目录结构
- 从源码结构看Nginx的模块化结构
10.1、Nginx源码的3个目录结构
在Linux版本的Nginx解压包下
mail 目录中存放了实现Nginx服务器邮件服务的源码
misc 目录中存放了两个文件。ngx_cpp_test_module.cpp 文件功能是测试程序中引用的头文件是否与C++兼容。ngx_google_perftools_module.cpp文件是用来支持Google PerfTools的使用的。GooglePerftools包含四个工具,用于优化内存分配的效率和速度。帮助在高并发的情况下很好地控制内存的使用。
os 目录 默认只包含一个unix目录,其中存放的源代码是针对“类Unix系统”,如Solaris、FreeBSD等的特殊情况,进行了实现。
stream :主要是流相关,upstream,以及ssl验证
core目录、event目录和http目录终点目录
10.1.1 core目录
nginx.*文件,包含Nginx程序入口函数main()
ngx_connection.*文件,实现与网络连接管理相关的功能
ngx_inet.*文件 实现与Socket网络套接字相关的功能
ngx_cycle.* 文件 实现对系统整个运行过程中参数、资源的统一管理和调配。
ngx_log.*文件 。实现日志输出、管理的相关功能。
ngx_file.*文件 实现文件读写相关功能
ngx_regex.*文件, 实现Nginx服务器对正则表达式的支持
ngx_string.*文件。 实现对字符串处理的基本功能
ngx_times.*文件 实现对时间的获取和处理操作。
当然还有其它,数组、队列、树等等数据结构定义。
10.1.2 event目录
实现了Nginx服务器的事件驱动模型。实现了Nginx服务器的消息机制。
modules目录中存放的源码实现了Nginx服务器支持的各类事件驱动模型。
10.1.3 http目录
该目录下的源码为Nginx服务器提供Web服务提供了主要的支持。该目录的结构安排和event目录相同
10.2、Nginx源码的模块化结构
将Nginx的源码按照实现功能划分为8个模块
10.2.1 公共功能
该部分的源码实现了Nginx各个模块依赖的公共基础,包括字符串处理、时间管理、脚本执行、文件读写、消息输出、锁机制等
10.2.2 配置解析
该部分的源码主要实现了对配置文件的解析和处理。包括对配置文件的语法检查、正则表达式的支持、配置参数的解析和参数值的初始化等
10.2.3、内存管理
该部分的源码主要实现了Nginx服务器对内存的管理。包括内存池的管理、共享内存的分配、缓存区的管理等
10.2.4、事件驱动
该部分的源码主要实现了Nginx服务器对各种事件驱动模型的支持,包括Nginx主进程的创建、工作进程的管理、信号的接收和处理、所有事件模型的实现等、另外,一些高级输入、输出功能、如Nginx的异步输入、输出(AIO)、文件内存映射(Mmap)、TCP/IP操作、散布读和聚集写(readv/writev)等机制
10.2.5、日志管理
该部分的源码主要实现Nginx服务器的日志功能,包括错误日志(Error Log)产生和管理、任务日志(Access Log)产生和管理等
10.2.6、HTTP服务
该部分的源码实现了Nginx服务器的主要功能-提供Web服务。包括客户端网络连接管理、客户端请求处理、虚拟机管理、服务群组管理、服务器代理、服务器认证及访问权管理等。
10.2.7、mail服务
该部分的源码实现了Nginx服务器的邮件服务。主要包括网络连接管理、虚拟机管理、服务器代理等。
10.2.8模块支持
Nginx服务器接收的客户端请求一次经过不同的模块进行分析和处理。主要实现对这些模块的类型的定义。对模块进行初始化、管理和组织、通过回调函数调用模块。通过指令控制模块的行为等