编译出适合自己的Nginx
编译Nginx(环境 CentOS8)
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -xzf nginx-1.18.0.tar.gz
- anto目录(有4个子目录)
- CC:用于编译
- lib
- OS:对所有操作系统的判断
- types
- 其他所有的文件是为了辅助configure脚本执行的时候去判定我们的Nginx支持哪些模块,当前的操作系统有什么样的特性可以供给nginx使用
- CHANGES文件:
- Nginx每一个版本中提供了哪些特性和bugfix
- CHANGES.ru:俄罗斯语言版本的CHANGES文件
- conf目录:
- 是一个示例文件,我们把nginx安装好以后,为了方便运维去配置,会把configure里面的示例文件拷贝到安装目录
- configure脚本:
- 是一个用来生成中间文件,执行编译前的一个必备动作。
- contrib目录:
- 提供了两个脚本和vim的工具,比如我们在没有使用vim打开Nginx配置文件,会发现它的色彩没什么变化
- 需要将contrib目录中的vim文件拷贝到我们自己的vim文件中(没有.vim就自己mkdir .vim)
cp -r contrib/vim/* ~/.vim/
- html目录:
- 这里面提供了两个标准的html文件
- 50x.html:发现500错误的时候,可以重定向到这个文件
- index.html:默认的nginx欢迎界面
man ./nginx.8
./configure --help | more
- 这里主要分为几个大类:
- 第一类就是我们确定Nginx在执行中,它会去找哪些目录下的文件作为它的辅助的一些文件。
- 比如我们用动态模块,modules-path就会产生作用,还有lock-path来确定我们nginx.log文件放在哪里。
- 如果没有变动的话,我们只需要指定prefix就可以了,所有其他的文件绘制prefix目录下建相应的文件夹
- 第二类参数主要是确定使用哪些模块,不使用哪些模块,它的前缀通常是with或者without。
- 通常需要我们主动加with模块的时候,这个模块通常是不会编译进nginx的
- 前面加without的模块默认会编译进nginx中。换句话说,在编译时不加这个参数,是编译进nginx的,加了这个参数是移除默认的nginx模块中。
- 第三类参数nginx编译中需要的特殊的参数
- 比如说用gcc编译的时候,要加一些什么样的优化参数
- 或者说打印debug级别的日志
- 以及需要加一些第三方的模块。
./configure --prefix=/home/nginx/nginx
- 指定nginx安装目录(此处若缺少PCRE库,参考文章:CentOS8安装库文件)
- 所有nginx配置的特性以及nginx运行时的目录都列在下方
- configure完成以后生成一些中间文件 ,中间文件会放在objs文件中
- 最重要的是生成了ngx_modues.c
- 它决定了接下来我们编译时有哪些模块会被编译进nginx。
- 所有被编译进nginx的模块都会被列举在这里,最后形成一个nginx_module_t类型的数组
make
- 编译时没出现错误,发现生成大量中间文件以及最终运行的nginx二进制文件(在objs目录下)。
- 如果我们做nginx版本升级,这时我们不能执行make install ,从objs目录下把nginx二进制文件拷贝到 安装目录中
- c语言编译时生成的所有的中间文件都会放在src目录
- 如果我们使用了动态模块,会生成.so动态文件,也会放在objs目录下
make install
- 最主要的nginx二进制文件在sbin目录下
- 决定nginx功能的配置文件在conf目录下
- access.log error.log 在logs目录下
- conf目录下所有的文件正是源代码中conf拷贝了一份过来,其中的内容也是完全相同的