Nginx源码阅读之入门篇

随笔 2016-09-12

  为了复习C语言和网络编程,决定入坑Nginx,Nginx的种种优点就不多说,这里不介绍使用,而是对源码进行一些初步分析,源码下载地址。如果在linux下阅读,可以用gdb很方便地调试,Windwos下则只能直接查看代码,editplus和UltraEdit都是很不错的工具。

  Nginx源码由几个部分组成:auto下是一些服务器脚本,conf里存放配置文件,contrib是一些附加工具,html下是默认页面,man下是查询手册,相当于linux的man,src下才是最重要的源码部分。

  Nginx的源码结构是很清晰的,也有一些必要的注释。

  1.jpg

  核心代码都在core文件夹下,程序入口在core/nginx.c中,命名皆是ngx_开头,按功能命名清晰,很容易查找。

  要阅读Nginx源码,不需要逐行查看,必须先从宏观上把握,然后进入每个模块了解相应的流程方法,最后归纳出它的设计思想。

  我们先看看Nginx的模块定义,很容易想到在core/ngx_module.c和ngx_module.h 中定义,在ngx_module.h中发现模块的基本数据结构:

  2.jpg

  在其它文件夹下的模块如http下的ngx_http_core_module中,又对这进行了继承,方便模块的调用(事实上含module的都可以理解为对一个模块的定义,并以此区分)。总的来说,core,event,mail,http,msic,stream下皆有模块的定义,但是按功能来划分的话,总共可以分为四个:

  1.Handle模块。可以理解为调度模块,主要处理http请求   2.Filter模块,存在于/http/modules下,负责对输出数据进行处理   3.Upstream模块,/stream下 ,作用是反向代理   4.Load-balance模块:辅助调度功能

 注:由于本人水平有限,如有不足,欢迎指正。


本文由 Tony 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

如果对您有用,您的支持将鼓励我继续创作!