菜鸟版本nginx源码入门
写在前面
为什么开始这个专题
本人之前看网上一些文章的时候,总感觉要是把nginx源码说的太简单,随便贴几个模块,要不把说的太复杂。所以本着相互学习的态度,觉得自己从头看一遍并且写下相应的心得,以达到抛砖引玉的作用。
c语言的基础
因为nginx是用c写的,需要读者有一定的c语言的基础,相对于c++而言,c语言还是没有那么复杂,如果没有这方面基础,推荐读者可以学习一下
计划
为了从简入难,计划先把nginx最简单的语法说完,然后加入nginx的一些新功能结合源码说明,最后我们增加一个自己定义的模块。
正文开始
nginx简述
这个大家应该都是清楚的,可自行查阅
nginx下载以及本次源码的对应的信息
对于mac系统,如果使用brew install nginx 下载则可忽略,下面主要是针对unix平台
首先打开nginx的官网 https://nginx.org/
选择如下的版本
如果是在linux平台等,可以wget https://nginx.org/download/nginx-1.14.2.tar.gz,然后进行解压 命令 tar -zxvf nginx-1.14.2.tar.gz,
然后进入目录 cd nginx-1.14.2
接下来分析一下每个文件或者目录的作用
auto
这个后面再说
CHANGES
这个从英文名上面看就是变更的意思,因为我们这次的版本是1.14,其实也就是个上个版本相比对应,对应的变化,感兴趣的可以cat 一下看看哈。
CHANGES.ru
其实就是对于CHANGES而言的俄语的版本。
conf
这个就是nginx的配置目录,后面会生成新的
configure
这个就比较重要了,主要是需要增加模块的信息。
显示所有的模块信息 ./configure --help
处于简单的考虑,我们这次只使用默认的模块,./configure --with-debug
这里显示我们完成,下面分别是,安装目录,可执行文件,模块等等
Makefile
如果有对Makefile感兴趣的读者,博主强力推荐 Makefile从入门到放弃
接下来就是安装,这个文件就是进行安装
我们先看看这个文件的内容。输入命令 cat Makefile
所以我们知道的make && make install ,就是等价于 make build && make installl.
而make build 就等于执行 $(MAKE) -f objs/Makefile
而 $(MAKE) 是make 里面的预定义的变量, -f 命令从make -h 中可以看出是
而我们 在当前命令行中也可以看出
因为 objs/Makefile没有指定任何默认make命令所以什么都没指定
然后执行make install,显示的是下午
然后我们进入objs目录下面,查看Makefile,查看install所有的命令行,可以看到和我们的上图是一样的,去除一些Makefile中的定义变量
对于nginx的编译过程我们放到后面去说。然后我们到nginx的生成目录下面去看,cd /usr/local/nginx/sbin/ && ./nginx && curl localhost,
如果显示这样恭喜你已经nginx的安装目录,接下来我们开始分析nginx代码
提前准备
代码跳转
linux
linux主要推荐使用vim+ctags,推荐文章VIM中ctags的简单使用教程
接下来是我自己装的过程
首先把vim装好,这个用 yum install -y vim 就可以了,然后就是ctgs了
首先是下载,命令 wget http://prdownloads.sourceforge.net/ctags/ctags-5.8.tar.gz,解压 tar -zxvf ctags-5.8.tar.gz,然后进入 对应目录 cd ctags-5.8,进行查看 ls
进行编辑运行 ./configure 再进行,make && make install ,再输入命令 ctags --verions,如果显示如下那么就代表你安装成功了。
然后到nginx源码中的main所在,利用ctags生成索引先查看当目录,pwd
/root/nginx/nginx-1.14.2/src/core,在进行ctags -R . 生成ctags,再ls查看索引
因为ngx的模块在是在/root/nginx/nginx-1.14.2/objs/ngx_modules.c 和main不在一个目录,所以我们需要设置成全局的,在 /root/.vimrc中加入 set tags=/root/nginx/nginx-1.14.2/src/core/tags,如图
这样我们 vim ngx_modules.c ,查看模块
在光标的地方,使用control+}就可以查看详情,control +t就可以跳回去,如果是windows,那么contro换成ctrl键就好了。是不是很方便,也方便我们进行调试。
当然还可以配合tagList是使用了,这里就不细说了,推荐文章vim 中Taglist的安装和使用
在vim后,输入 "Tlist"以后出现,如下,说明安装成功,会展示自己的当前文件下面的变量和方法,一目了然还是很方便的
mac
推荐进行vscode,或者clion,可以自行查询哈。
接下来我们进入分析,为了控制篇幅,分到其他文章了,有感兴趣的读者可以点击看看,有不明白的也欢迎提问