- 1、本文档共145页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
nginx核心讲解.doc-Lenky个人站点
nginx核心讲解
第零章 前言
慕名对nginx的源码进行学习研究是早在2009年的事情,当时还在学校,整天呆在实验室里看动漫,时间一久就心感愧疚,觉得还是要趁有空学点东西,恰当时不知从哪里得知高性能服务器是一个很有“前途”的方向,几经有哪些信誉好的足球投注网站又机缘偶合的得识lighttpd与nginx,从此开始在动漫与代码之间来回穿梭,直到毕业。
关于lighttpd与nginx,无需多说,当时lighttpd比nginx要火,所以我先看的lighttpd源码,后看的nginx源码,也因此lighttpd的文档在我读书的时候就写完(虽然写得很矬)了,但nginx的文档写了一些放在电脑里,后来离开学校开始工作后,就把这件事情和这些文档都给搁在那了,直到近一年前,我建了一个个人博客站点(/),为了凑文章数目,才又把它们给找了出来,并且根据必威体育精装版的nginx源码重新整理了一下,也就是现在你看到的这篇文档。
重新整理主要是因为注意到以前写的文档过细的去逐行注释代码(网上很多nginx源码分析的文章也大多有这个缺点),而此次希望能从比较高一点的角度去解析nginx,让读者尽快的把握全局,搞清楚整体实现原理而不是陷入细节。我个人认为,只要看清楚了整体的实现原理,对于一时半会没有触及到的细节,在真正遇到那个点再去理解时肯定毫不费力,最多也只不过是可能还需要去查一下man手册,了解一下系统API而已。授人以鱼不如授人以渔,这也是我此次重新整理的最主要目标,为了达到这个目标,文档里就尽量的少贴代码多画图,当然一些必要的代码是不可缺少的,所以你还是会在本文档里看到源代码。从文档名称叫做核心讲解,而不是源码分析,这也足见我的个人期望,虽然我的个人期望比较好,可惜限于水平比较差,目前写出来的文档也就这个样了。:)
最后,说一下本文档基于的相关环境,虽然列了一个表格如下,其实没那么复杂,我安装的是一个centos 6.2的32位虚拟机(Intel x86),其它开发软件包都是centos 6.2里所对应提供的,而nginx版本为1.2.0。另外,在没有特别说明的情况下,文档讲解过程中针对的nginx配置环境是http协议、epoll事件机制。
软件包 版本 nginx 1.2.0 os CentOS release 6.2 (Final)/kernel-2.6.32/32bit gcc gcc version 4.4.6(Red Hat 4.4.6-3) (GCC) gdb GNU gdb (GDB) Red Hat Enterprise Linux (7.2-50.el6) make GNU Make 3.81
文档版本(由于文档目前在逐步整理中,尚未仔细校订,所以难免出现错误,如发现错误请反馈,非常感谢,文档将持续更新,请关注更新地址:/ebook/):
版本号 修订时间 0.1 2012-7-20 0.2 2012-7-22
新增事件机制一章 0.3 2012-7-29
新增初始变量、支撑机制、脚本引擎三节 0.31 2012-8-5
修订完成第六章 0.32 2012-8-9
修订第三章 0.35 2012-8-11
新增第七章:创建监听套接口、创建连接套接口 0.4 2012-8-15
完成第七章 第一章 进程解析
进程模型
nginx的进程模型和大多数后台服务程序一样,按职责将进程分成监控进程和工作进程两类,启动nginx的主进程充当监控进程,而由主进程fork出来的子进程则充当工作进程。工作进程的任务自然是完成具体的业务逻辑,而监控进程充当整个进程组的对外接口,同时对工作进程进行监护,比如如果某工作进程意外退出,监控进程将重新fork生成一个新的工作进程。nginx也可以单进程模型执行,在这种进程模型下,主进程就是工作进程,此时没有监控进程,单进程模型比较简单且官方建议仅供测试使用,所以下面主要分析多进程模型。
分析nginx多进程模型的入口函数为主进程的ngx_master_process_cycle()函数,在该函数做完信号处理设置等之后就会调用一个名为ngx_start_worker_processes()的函数用于fork产生出子进程(子进程数目通过函数调用的第二个实参指定),子进程作为一个新的实体开始充当工作进程的角色执行ngx_worker_process_cycle()函数,该函数主体为一个无限for循环,持续不断的处理客户端的服务请求,而主进程继续执行ngx_master_process_cycle()函数,也就是作为监控进程执行主体for循环,这也是一个无限循环,直到进程终止才退出,服务进程基本都是这种写法,所以不用详述,下面先看看这个模型的图示:
上图中表现得很明朗,监控
文档评论(0)