第十章 Nginx 源码结构【笔记】

来源:互联网 发布:mac os x 重装 很慢 编辑:程序博客网 时间:2024/06/18 08:45

涉及内容

  • 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服务器接收的客户端请求一次经过不同的模块进行分析和处理。主要实现对这些模块的类型的定义。对模块进行初始化、管理和组织、通过回调函数调用模块。通过指令控制模块的行为等