0°

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

内容预览:
  • 始发于微信公众号: Java后端技术 上一篇()已经介绍了Nginx的基本功能...~
  • 举个简单的例子,Core模块下的第一个文件nginx.c的一部分代码如下: 从...~
  • 并且还有event–modules下边明确的列出了几种事件的模型,也是后边在学习...~

始发于微信公众号: Java后端技术

上一篇()已经介绍了Nginx的基本功能,也介绍了在Windows下的安装和简单的实现负载均衡,下边主要学习一下Nginx的源码结构。


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

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

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

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

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

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

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

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

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

对源码进行编译

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

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

2.安装openssl 

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

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

3.gzip 类库安装

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

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

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

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

–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的源码结构和模块初始化

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

分析编译之后的文件:

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

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

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

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

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

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

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

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

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

Java后端技术QQ群,群文件分享大量学习资料,欢迎加群下载: 523277336,欢迎加入!

版权声明


Java后端技术所推送文章,为本人原创、网上收集或其他作者投稿,对于网上收集部分除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,我们会在24小时内删除处理,谢谢!^_^   QQ:1573876303




Nginx的源码结构和模块初始化
微信公众号,长按关注或微信搜索公众号:Java后端技术。
Nginx的源码结构和模块初始化



和大佬一起学习网络安全知识

以上就是:Nginx的源码结构和模块初始化 的全部内容

本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢^^
Email:[email protected]


编程语言
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论