【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,可以自行查询哈。

接下来我们进入分析,为了控制篇幅,分到其他文章了,有感兴趣的读者可以点击看看,有不明白的也欢迎提问

nginx 模块分析(点击可跳转)

nginx 流程分析(点击可跳转)

nginx流程分析之变量篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值