利用nginx wiki和互联网收集了不少nginx相关的文档资料,但是仔细阅读之后发觉对理解nginx架构有直接帮助的资料不多,一些有帮助的资料也要结合阅读部分源码细节才能搞清楚所述其是,可能nginx在非俄国之外的环境下流行不久,应用还很简单,相关的英文和中文文档也就不够丰富的原因吧。
不过还是有一些金子的。
如果要了解nginx的概况和使用方法,wiki足以满足需要,wiki上有各个模块的概要和详细指令说明,也有丰富的配置文件示例,不过对于了解nginx系统架构和开发没有相关的文档资料。
nginx的开发主要是指撰写自定义模块代码。这需要了解nginx的模块化设计思想,模块化也是nginx的一个重要思想,如果要整体上了解nginx,从模块化入手是一个不错的起点。emiller的nginx模块开发指引是目前最好的相关资料了(
http://emiller.info/nginx-modules-guide.html
),这份文档作为nginx的入门文档也是合适的,不过其中有些内容很晦涩,很难理解,要结合阅读源码,反复比对才能真正理解其内涵。
如果要从整体上了解nginx架构和源码结构,Joshua zhu的广州技术沙龙讲座的pdf和那张大图是不错的材料,这份pdf可以在wiki的资源页面中找到地址链接。Joshua也给了我一些建议和指引,使我少走了不少弯路,很快进入状态,感谢。
相信最好的文档就是源码本身了。随着阅读源码的量越来越大,也越来越深入,使我认识到最宝贵的文档就在源码本身,之前提到过,nginx的代码质量很高,命名比较讲究,虽然很少注释,但是很有条理的结构体命名和变量命名使得阅读源码就像是阅读文档。不过要想顺利的保持这种感觉也不是一件简单的事情,觉得要做好如下几点:
1)熟悉C语言,尤其是对函数指针和宏定义要有足够深入的理解,nginx是模块化的,它的模块化不同于apache,它不是动态加载模块,而是把需要的模块都编译到系统中,这些模块可以充分利用系统核心提供的诸多高效的组件,把数据拷贝降到最低的水平,所以这些模块的实现利用了大量的函数指针实现回掉操作,几乎是无函数指针不nginx的地步。
2)重点关注nginx的命名,包括函数命名,结构体命名和变量命名,这些命名把nginx看似耦合紧密的实现代码清晰的分开为不同层次不同部分的组件和模块,这等效于注释。尤其要关注变量的命名,后面关于模块的分析中会再次重申这一点。
3)写一个自定义的模块,利用nginx强大的内部组件,这是深入理解nginx的一个有效手段。
接下来的分析过程,着眼于两个重点,一个就是上面提到的模块化思想的剖析,力争结合自身理解把这个部分分析透彻;另一个重点是nginx的事件处理流程,这是高性能的核心,是nginx的core。
nginx 变量 url
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:TreeMultimap构建数
下一篇:python镜像启动以及端口映射
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
idea test 包找不到主类
1.6类加载机制1.6.1概述学习本章前我们要对类文件结构有一个简单的认识,而学习类文件结构没有任何难度,更多的是参考《Java虚拟机规范》、《Java语言规范》中定义的规则。我们要对class文件了解,知道class文件格式、包括常量池类型、访问表示类型、属性表结构及名称等等。例如我们可以在我们的IDEA下载jclasslib插件,然后打开我们的Java文件进行学习,如图1-29所示。左侧是我们
idea test 包找不到主类 idea 错误: 找不到或无法加载主类 java类初始化顺序 java类加载机制 加载