nginx高效学习方法 linux
nginx作为一个高性能的web服务器,相对于apache等服务器来讲它的代码量并非很是庞大,反而很是精简。看过nginx源码的人都知道,nginx将“一切皆为模块”和“全部问题均可以经过加层的方式来解决”这两句话体现得淋漓尽致。nginx全部功能都由一个一个模块叠加而成,这对快速定位问题很是有用。在计算机行业中有这么一句话,计算机中的全部问题均可以经过增长中间层的方式来解决;好比linux物理内存太少不够用,就经过增长虚拟内存这一层来解决;再好比内存访问磁盘的速度过低,就经过增长调整缓存这一层来解决等等。nginx也是同样经过增长中间层来解决问题,nginx的大致上分为三层,第一层由核心模块、事件模块,日志模块组成,主要处理配置解析、TCP网络事件等;第二层由http框架模块、mail框架模块等组成,在第一层的基础上处理用户的请求,解析用户请求行、请求头(http协议);第三层由业务模块组成,经过获取第二层解析的用户请求信息进行业务处理。nginx
nginx是一个很是优秀的开源软件,学习它能够提升咱们编码的能力。相信每一个人都能学会nginx,只是时间问题而已,但如何发最少的时间高效的学会nginx呢?本人学习nginx已有大半个月,虽没有彻底看完nginx源代码,但也看懂近十个模块的源代码。如下是本人学习nginx的一些方法。web
第一步、下载nginx源代码,在linux上编译安装
能看懂configure文件的尽可能学习一下,看不懂的就算了,编译完后是知道在objs目录下有一个ngx_modules.c文件,这文件里存有nginx模块加载运行的顺序。
第二步、用sourceInsight创建一个nginx源码工程
第3、四步中会用到
第三步、找一本nginx方面的电子书,按照书的流程看一遍
入门级书中通常都会介绍一些nginx经常使用的配置项、nginx经常使用的数据结构、以及如何编写nginx模块等等,这些都得学会。看书是有技巧的,在看书时遇到书中对某结构体或者某函数的描述时就将描述信息写在源代码中对相应的结构体或函数边,后续看代码时就不须要再这里找那里找了。
第四步、阅读源代码
书看完了,并不表明就学会了,有些细节还得经过看源代码才能知道。阅读源代码不能无目的的去看,得按照ngx_modules.c文件中模块的编译 顺序一个模块一个模块的去看,模块之间总会有些依赖关系的,前一个模块所作的工做每每后面的模块要用到,不按模块顺序看是要付出很大代价的。因为在第三步中对一些重要的结构成员已经有描述了,此时看起代码来就不那么困难了。源代码至少得看两遍,第一遍将每一个模块的源码看一遍,知道该模块处理了那些配置项,完成了什么功能;第二遍得从链接的角度去看,如当nginx收到用户请求时通过那些模块,这些模块对它作了那些处理等。
apache
一些比较有用的资料
http://nginx.org/en/docs/ //官方文档,关于nginx的任何资料都能在这里找到,重要的是这些列出了每一个模块处理的配置项
http://www.pagefault.info/?p=188 //nginx的启动过程分析,这篇文章确实不错
缓存
以上只表明我我的的学习办法,对某些牛人来讲也许并不适合。
漫漫江湖路,高手寂寞心。要想成为高手,是必需得要有所付出的。
服务器