在Nginx开源版官网点击右侧download可以看到各个版本的Nginx,其中Mainline是抢先的主干版本(版本号是奇数),Stable是稳定版(版本号是偶数)。
点击某个版本左侧的CHANGES可以查看CHANGES文件,其中Feature
标注了新增的功能,Bugfix
标注了修复的bug,Change
标注了做了重构的部分。
没有特殊需求一般就用开源版Nginx,如果要开发API服务器或者Web防火墙可以考虑用OpenResty。商业版一般比开源版多的是技术支持。
网上既有开源的免费版的Nginx,也有非开源的商业版的Nginx Plus。
另外阿里也推出了基于Nginx主干版本开发的Tengine,它在阿里的生态下经历了严苛的考验,它的很多特性领先于Nginx的官方版本。虽然也能用Nginx的一些第三方模块,但是没有办法跟着Nginx的官方版本同步升级,所以不推荐使用。
因为Nginx的第三方模块开发难度比较大,OpenResty将Nginx的框架用Lua语言同步开发实现了,所以OpenResty兼具了高性能和高的开发效率。
开源版:http://openresty.org
商业版:https://openresty.com.cn
虽然可以用OS上自带的yum、apt-get等工具安装,但直接安装Nginx二进制文件会把模块编译进来,Nginx的官方模块并不是每一个都会默认开启的,如果想添加第三方的Nginx模块必须通过编译的方式来安装,这样才能把第三方的这样的强大生态圈的内容添加到Nginx中。
到开源Nginx官网选择要下载的版本,复制其链接地址,用wget命令下载压缩包:
wget http://nginx.org/download/nginx-1.14.2.tar.gz
这里下载到/home/software/
目录下。
将其解压并进入解压后的目录:
tar -xzf nginx-1.14.2.tar.gz
cd nginx-1.14.2
如下可见,auto/
目录中有四个子目录,auto/cc/
是用于编译的,auto/lib/
是库目录,auto/os/
是用于判断操作系统的,其它所有文件都是为了辅助config
脚本执行时去判定Nginx支持哪些模块,当前的操作系统有什么样的特性可以供给Nginx使用。
这个文件在官网上也可以直接看到,就是看Nginx每个版本的Feature
、Bugfix
和Change
。
因为作者是俄罗斯人,所以会有个俄语版本的CHANGES
文件。
这里存放的是一些示例文件,安装好Nginx后为了方便运维配置,会把conf/
中的示例文件拷贝到安装目录。
这是用来生成中间文件的脚本,执行编译前的必备动作。
这个目录中提供了pl脚本和vim配置。
如果直接使用vim打开Nginx配置文件:
vim conf/nginx.conf
会发现没有专门针对它的配色:
而将contrib/vim/
目录中的所有内容拷贝到自己用户的vim配置目录中去:
cp -r contrib/vim/* ~/.vim/
再打开刚刚的配置文件:
vim conf/nginx.conf
这个目录中提供了50x.html
和index.html
两个标准的html文件,第一个是出现500(或者501,502,…)错误时重定向到该文件,第二个是默认的Nginx欢迎页面。
这之中是用于Linux的man
命令的帮助文件,例如man ./man/nginx.8
就可以查看此文件中描述的帮助内容。
这是Nginx的源码目录。
在编译前,可以看下configure
脚本支持哪些参数:
./configure --help | more
这里主要看几类重要的参数。
Nginx执行中会去找哪些目录下的文件作为辅助的文件,例如--modules-path
指定动态模块位置,又如--lock-path
指定nginx.lock
放在哪里。
如果这些都没有特殊的需要的话,只需要指定--prefix
安装目录就可以了,其它的文件位置会在其下建立相应的目录。
这些参数主要是为了确定使用哪些模块和不使用哪些模块,这里面有with-*
的表示这个模块默认是不会被编译进Nginx中的,如果要就用它指定。
同理,这里面有without-*
的表示这个模块默认会被编译进Nginx中,如果不要就用它指定。
指定安装目录,生成用于编译的中间文件:
./configure --prefix=/home/software/nginx
*如果报错./configure: error: C compiler cc is not found.
那么要先安装GCC等:
yum -y install gcc gcc-g++ autoconf automake make
*如果报错./configure: error: the HTTP rewrite module requires the PCRE library.
那么要先安装PCRE:
yum -y install pcre-devel
*如果报错./configure: error: the HTTP gzip module requires the zlib library.
那么要先安装zlib:
yum install -y zlib-devel
这一步运行成功后,Nginx特性和配置的各类目录都会显示在最后:
这时,在解压后的Nginx目录下多出了一个objs/
目录,这就是保存生成的中间文件的目录,该目录下的内容:
这里有个ngx_modules.c
,这个文件决定了接下来编译过程中,有哪些模块会被编译进Nginx。
在解压后的目录下执行make
命令即可开始编译,最终编译完成的样子:
编译完成后,可以在objs/
目录中看到生成了Nginx二进制文件:
如果要做Nginx版本升级,不能直接
make install
,而要把这里编译出的二进制文件拷贝到Nginx安装目录中。
而在objs/src
目录是刚刚编译生成的中间文件(C语言编译生成的中间文件都会放在src目录下):
如果使用了动态模块,会生成so动态文件,也是放在objs/
目录下。
首次安装时可以使用make install
命令安装,安装完成的样子:
在指定的安装目录中可以看到:
Nginx的二进制文件在sbin/
目录下,配置文件在conf/
目录下,access.log
(访问日志)和error.log
(错误日志)在logs/
目录下。