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

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

      

nginx 目录结构 nginx源码目录_nginx 目录结构

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

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

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

nginx 目录结构 nginx源码目录_nginx 目录结构_02

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

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

 

二、对源码进行编译

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

      

nginx 目录结构 nginx源码目录_nginx 目录结构_03

 

2.安装openssl 

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

       

nginx 目录结构 nginx源码目录_nginx 目录结构_04

 

3.gzip 类库安装

       

nginx 目录结构 nginx源码目录_Nginx源码_05

 

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

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

      

nginx 目录结构 nginx源码目录_re模块_06

 

–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文件下

    

nginx 目录结构 nginx源码目录_nginx 目录结构_07

 

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

分析编译之后的文件:

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

nginx 目录结构 nginx源码目录_Nginx_08

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

nginx 目录结构 nginx源码目录_nginx_09

 

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

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

nginx 目录结构 nginx源码目录_nginx 目录结构_10

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

nginx 目录结构 nginx源码目录_nginx_11