编译安装NGINX与使用
使用包管理程序安装的软件包基本都不是最新的,而且不同云服务商提供的Linux镜像中预装源所取得的软件版本更是五花八门,最奇特的是我在使用某服务商提供的 CentOS 8.1 时,用 yum
安装 NGINX 居然装出来是 1.14.2,这版本也太老了。
使用编译安装来获取最新版本。
编译安装
下载安装包
在nginx的下载页里可以查看到各种安装包的下载链接,例如获取当前稳定版的安装包:
1 | wget http://nginx.org/download/nginx-1.18.0.tar.gz |
别忘了进行解压:
1 | tar -zxvf nginx-1.18.0.tar.gz |
安装依赖
首先要确保编译安装的通用依赖 gcc
和 make
:
1 | yum -y install gcc make |
然后安装NGINX本身需要的依赖:
1 | yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel |
Configure
1 | ./configure \ |
这里用户指定参数 prefix
描述了安装路径、 --with-http_ssl_module
项指出要安装SSL模块,而 --with-http_v2_module
指出要安装HTTP2模块。
--with-openssl
表示自定义NGINX的OpenSSL库(否则使用系统的OpenSSL库),指定的目录是OpenSSL的源码目录,NGINX会自动对OpenSSL编译安装。
可以根据自己的需求选择参数和选项。
make && make install
1 | make && make install |
NGINX的这一步执行的很快,以至于我第一次以为没安装好(笑)。
使用
进入NGINX安装路径
1 | cd /usr/local/nginx |
软连接可执行文件
1 | ln -s /usr/local/nginx/sbin/nginx /bin/nginx |
这样的话会在 /bin/
里生成一个NGINX可执行文件的软链接。
注意不要使用相对路径,那样很大概率会在执行 /bin/nginx
时提示链接层数过多而无法执行。
配置NGINX
NGINX的默认配置文件是 /usr/local/nginx/conf/nginx/conf
。
NGINX命令
编译安装,而不是使用 yum
安装的NGINX,是不能使用 systemd
进行管理的,因为没有默认配置 systemd
单元文件。
常用的NGINX命令有:
nginx
:打开NGINX。
nginx -t
:检查配置文件的语法错误。
nginx -s reopen
:重启NGINX。
nginx -s reload
:重新加载NGINX配置文件(优雅的重启NGINX)。
nginx -s stop
:强制停止NGINX。
nginx -s quit
:处理完所有请求后再停止服务(优雅的停止NGINX)。
nginx -v
:显示NGINX版本(简略地显示)。
nginx -V
:显示NGINX版本(还会显示configure时用户指定的模块和参数)。
版本不变添加模块
进入源码路径。
重新configure。
make。 不要make install!!要不就直接覆盖安装了。
1
make
备份原来的NGINX可执行文件
1
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
从这里我们其实也可以知道,选择安装的模块其实就集成在可执行文件里。
用新的NGINX覆盖旧的NGINX可执行文件
1
cp ./objs/nginx /usr/local/nginx/sbin/
启动NGINX
1
nginx
查看模块是否增加成功
1
nginx -V
编译平滑升级NGINX
下载新的安装源码包
进行configure
make。 不要make install!!要不就直接覆盖安装了。
1
make
备份原来的NGINX可执行文件
1
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
从这里我们其实也可以知道,选择安装的模块其实就集成在可执行文件里。
用新的NGINX覆盖旧的NGINX可执行文件
1
cp ./objs/nginx /usr/local/nginx/sbin/
在新的源码目录的根目录里执行
1
make upgrade
注意:如果原来的相关配置文件中,写有和ssl有关的配置信息,需要先暂时注释掉,否则更新时可能会报错。
查看是否更新成功
1
nginx -v