第七章 nginx源码分析.pdfVIP

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
nginx 源码分析 nginx 源码分析(1)- 缘起 nginx 是一个开源的高性能web 服务器系统,事件驱动的请求处理方式和极 其苛刻的资源使用方式,使得nginx 成为名副其实的高性能服务器。 nginx 的 源码质量也相当高,作者“家酿”了许多代码,自造了不少轮子,诸如内存池、 缓冲区、字符串、链表、红黑树等经典数据结构,事件驱动模型,http 解析, 各种子处理模块,甚至是自动编译脚本都是作者根据自己的理解写出来的,也正 因为这样,才使得nginx 比其他的web 服务器更加高效。 nginx 的代码相当精巧和紧凑,虽然全部代码仅有10 万行,但功能毫不逊 色于几十万行的apache。不过各个部分之间耦合的比较厉害,很难把其中某个 部分的实现拆出来使用。对于这样一个中大型的复杂系统源码进行分析,是有一 定的难度的,刚开始也很难找到下手的入口,所以做这样的事情就必须首先明确 目标和计划。 最初决定做这件事情是为了给自己一些挑战,让生活更有意思。但看了几天 之后,觉得这件事情不该这么简单看待,这里面有太多吸引人的东西了,值得有 计划的系统学习和分析。首先这个系统中几乎涵盖了实现高性能服务器的各种必 杀技,epoll、kqueue、master-workers、pool、buffer… …,也涵盖了很多 web 服务开发方面的技术,ssi、ssl、proxy、gzip、regex、load balancing、 reconfiguration、hot code swapping… …,还有一些常用的精巧的数据结构 实现,所有的东西很主流;其次是一流的代码组织结构和干净简洁的代码风格, 尤其是整个系统的命名恰到好处,可读性相当高,很kiss,这种风格值得学习 和模仿;第三是通过阅读源码可以感受到作者严谨的作风和卓越的能力,可以给 自己增加动力,树立榜样的力量。 另一方面,要达到这些目标难度很高,必须要制定详细的计划和采取一定有 效的方法。 对于这么大的一个系统,想一口气知晓全部的细节是不可能的,并且nginx 各个部分的实现之间关系紧密, 不可能做到窥一斑而知全身,合适的做法似乎 应该是从main 开始,先了解nginx 的启动过程的顺序,然后进行问题分解,再 逐个重点分析每一个重要的部分。 对每个理解的关键部分进行详细的记录和整理也是很重要的,这也是这个源 码分析日志系列所要完成的任务。 为了更深刻的理解代码实现的关键,修改代码和写一些测试用例是不可避免 的,这就需要搭建一个方便调试的环境,这也比较容易,因为使用的linux 系统 本身就是一个天然的开发调试环境。 个人的能力是有限的,幸运的是互联网上还有一帮同好也在孜孜不倦的做着 同样的事情,与他们的交流会帮助少走一些弯路,也会互相促进,更深入和准确 的理解源码的本实。 开始一次愉快的旅行,go ! nginx 源码分析(2)- 概览 源码分析是一个逐步取精的过程,最开始是一个大概了解的过程,各种认识 不会太深刻,但是把这些真实的感受也记录下来,觉得挺有意思的,可能有些认 识是片面或者是不正确的,但可以通过后面更深入细致的分析过程,不断的纠正 错误和深化理解。源码分析是一个过程,经验是逐步累积起来的,希望文字可以 把这种累积的感觉也准确记录下来。 现在就看看对nginx 源码的第一印象吧。 源码包解压之后,根目录下有几个子目录和几个文件,最重要的子目录是 auto和src,最重要的文件是configure脚本,不同于绝大多数的开源代码,nginx 的configure 脚本是作者手工编写的,没有使用autoconf 之类的工具去自动生 成,configure 脚本会引用auto 目录下面的脚本文件来干活。根据不同的用途, auto 目录下面的脚本各司其职,有检查编译器版本的,有检查操作系统版本的, 有检查标准库版本的,有检查模块依赖情况的,有关于安装的,有关于初始化的, 有关于多线程检查的等等。configure 作为一个总驱动,调用这些脚本去生成版 本信息头文件、默认被包含的模块的声明代码和Makefile 文件,版本信息头文 件 (ngx_auto_config.h,ngx_auto_headers.h)和默认被包含的模块的声明代码 (ngx_modules.c)被放置在新创建的objs 目录下。要注意的是,这几个生成的文 件和src 下面的源代码一样重要,对于理解源码是不可忽略

文档评论(0)

xiaofei2001128 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档