Nginx的源码结构和模块初始化

Nginx的源码src目录结构(未进行编译安装)

环境:nginx-1.8.0 + Cent OS 7.0
(可以使用 yum install tree 来安装tree命令,就可以显示出文件的树结构),结果如下:

从上边的源码中可以看出共有10 directories, 265 files,Nginx的主要模块是Core、event、http、mail、misc(杂项,包含多种功能)、os这几个部分,并且根据源代码的命名也可以大致的猜测出其所代表的功能。

建议大家下载其源码,大致看一下,这样的话,也能够更好的理清楚Nginx的功能组成。

举个简单的例子,Core模块下的第一个文件nginx.c的一部分代码如下:

从上述可以看出,ngx_core_commands[]这一个数组定义了Core模块下所使用的全部设置命令(这也是后边学习Core模块的时候需要介绍的)。

并且还有event–modules下边明确的列出了几种事件的模型,也是后边在学习该模块的时候需要学习的地方。
由于对shell脚本语言和C掌握的程度有限,不对源码做过多的解释。

对源码进行编译


如果使用的CentOS的话需要先下载一些基础软件,可以使用命令进行下载:
1、为了支持rewrite功能,我们需要安装pcre

2.安装openssl

需要ssl的支持,如果不需要ssl支持,请跳过这一步

3.gzip 类库安装

(注:如果是Ubuntu的话,直接使用命令sudo apt-get install nginx 进行下载即可)

4、准备好源码,进行解压:tar -zxvf nginx-1.8.0.tar.gz
5、编译和安装,执行如下命令:

–with-http_stub_status_module:支持nginx状态查询
–with-http_ssl_module:支持https
–with-http_spdy_module:支持google的spdy,想了解请百度spdy,这个必须有ssl的支持
–with-pcre:为了支持rewrite重写功能,必须制定pcre

(如果这里有提示还需要安装其他的包,安装即可)

设置之后,执行make 结束之后执行 make install

启动命令在/usr/local/nginx-1.8.0/sbin文件下

(如果在Ubuntu的话,可能是在/usr/sbin目录下)

分析编译之后的文件:


/usr/local/nginx-1.8.0目录下:这是编译之后生成的配置等文件:

在conf目录下有几个配置文件,该配置文件用于控制Nginx服务器的基本功能,其中nginx.conf为:

从上边的内容中可以看出,每一个配置属性的意思大致可以看出来,这一点会在后边的分模块学习时详细说明。

同样的在编译之后,会在原来的Nginx代码包中生成一个objs的目录,其中,生成的ngx_modules.c文件中,重新集中申明(使用extern关键字)了nginx配置的所有模块,这些模块可通过编译前的configure命令进行配置,即设置哪些模块需要编译,哪些不被编译。
如下。包含了执行编译过程中的内容:

这些模块均是在此处用extern进行申明,以表明其他模块可以访问,而对其本身的定义和初始化ngx_module_t结构在其对应的.c文件中进行。例如,ngx_core_module模块便是在./src/core/nginx.c文件中定义并进行静态初始化。实际上,ngx_core_module是一个全局的结构体对象,其他模块类同。如下: