编译安装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

安装依赖

首先要确保编译安装的通用依赖 gccmake

1
yum -y install gcc make

然后安装NGINX本身需要的依赖:

1
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel

Configure

1
2
3
4
5
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-openssl=/root/openssl-1.1.1g

这里用户指定参数 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时用户指定的模块和参数)。

版本不变添加模块

  1. 进入源码路径。

  2. 重新configure。

  3. make。 不要make install!!要不就直接覆盖安装了。

    1
    make
  4. 备份原来的NGINX可执行文件

    1
    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

    从这里我们其实也可以知道,选择安装的模块其实就集成在可执行文件里

  5. 用新的NGINX覆盖旧的NGINX可执行文件

    1
    cp ./objs/nginx /usr/local/nginx/sbin/ 
  6. 启动NGINX

    1
    nginx
  7. 查看模块是否增加成功

    1
    nginx -V

编译平滑升级NGINX

  1. 下载新的安装源码包

  2. 进行configure

  3. make。 不要make install!!要不就直接覆盖安装了。

    1
    make
  4. 备份原来的NGINX可执行文件

    1
    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

    从这里我们其实也可以知道,选择安装的模块其实就集成在可执行文件里

  5. 用新的NGINX覆盖旧的NGINX可执行文件

    1
    cp ./objs/nginx /usr/local/nginx/sbin/ 
  6. 在新的源码目录的根目录里执行

    1
    make upgrade

    注意:如果原来的相关配置文件中,写有和ssl有关的配置信息,需要先暂时注释掉,否则更新时可能会报错。

  7. 查看是否更新成功

    1
    nginx -v