从零开始阅读nginx源码系列(一)
前言
看了«深入理解Nginx»的一些章节后,发现看完还是云里雾里,于是想重新看源码整理一遍。然后就想,要是我是一个从头看源码的人,我会怎么开始看,所以就想着记录一下自己整理源码的过程。
首先,我们把源码下载下来,然后编译跑起来。为什么要跑起来呢,因为看代码其实很枯燥,所以跑起来,一边实践一边看代码,是比较好的方式。我们在哪看不懂或者有疑问,也可以加上日志,跑起来看看。
获得源码
从GitHub nginx获取源码
1
2
3
4
5
git clone https://github.com/nginx/nginx.git
# 进入源码目录
cd nginx
# checkout到当前最新稳定版
git checkout -b stable-1.18 origin/branches/stable-1.18
编译源码
1
2
3
4
5
# 进入nginx源码目录
cd nginx
# 创建$HOME/local,放我们编译好的二进制,可以跑起来测试
mkdir $HOME/local
auto/configure --prefix=$HOME/local/nginx
auto/configure这个脚本是检查一些环境变量,然后生成宏变量,如果跑这个脚本过程报错的话,在auto里面搜索对应的关键字,一般可以找到原因。比如有些系统没装pcre库,就可以下载pcre的源码,然后指定pcre源码路径,再重新configure一下就可以了。
跑完这个脚本,我们来看看生成了什么东西,先git status一下
生成了Makefile和一个objs文件夹,仔细看这个Makefile就知道,其实最终是调objs里面的Makefile,我们继续看一下objs(tree objs)里面的内容
我们主要看里面两个头文件和一个源文件,两个头文件是生成的一些宏定义,nginx源码里面用到很多宏,到时可以回到这里看,ngx_modules.c则是所有模块的数组,这个我们后面再说,objs/src里面只是一些空文件,目录结构跟源码目录src结构一样,是为了放编译过程生成的目标文件。现在我们来编译一下。
1
2
make -j 4
make install
编译安装完就会看到bin下面有二进制和配置文件等
跑起来
我们先改一下配置文件,主要改三个地方,日志级别、监听端口和单进程模式,如图:
1
2
3
# nginx默认的配置文件是conf/nginx.conf,可以用-c指定配置文件路径
cd $HOME/local/nginx
sbin/nginx -c conf/nginx.conf
若有报错可以看logs/error.log文件。然后用浏览器访问我们的服务器和端口,若出现welcom to nginx页面则成功跑起来。



