nginx之安装第三方模块及平滑升级

目录

    • 一、安装第三方模块
      • 1、未安装nginx的情况下安装第三方模块
      • 2、已安装nginx的情况下安装第三方模块
    • 二、平滑升级
      • 1、什么是平滑升级?
      • 2、信号的接受和处理
      • 3、实例

一、安装第三方模块

  nginx本身自带的功能比较少,但之所以nginx仍然这么强大,因为它支持第三方模块。

  这里我们以安装echo-nginx-module模块为例。未安装echo-nginx-module这个模块的情况下,在nginx配置文件中如果使用"ehco"命令,就会出现unknown directive "echo"的报错。起初我也不明白这是什么情况,最后百度才知道是缺少echo-nginx-module这个模块。

  首先需要下载echo-nginx-module模块的tar.gz包到本地。点击这里进入下载界面!

#复制链接地址后,使用wget工具下载到本地/usr/local/src目录下
[root@nginx-server ~]# cd /usr/local/src/    #进入/usr/local/src/目录下
[root@nginx-server src]# wget https://github.com/openresty/echo-nginx-module/archive/v0.62.tar.gz    #下载0.62版本
[root@nginx-server src]# ls
v0.62.tar.gz

  下载完成后,将其解压。

[root@nginx-server src]# tar xf v0.62.tar.gz    #解压安装包
[root@nginx-server src]# ls
echo-nginx-module-0.62  v0.62.tar.gz

1、未安装nginx的情况下安装第三方模块

[root@nginx-server nginx-1.18.0]# ./configure \    #配置
> --prefix=/usr/local/nginx \    #指定安装路径
> --add-module=/usr/local/src/echo-nginx-module-0.62    #安装第三方模块
[root@nginx-server nginx-1.18.0]# make    #编译
[root@nginx-server nginx-1.18.0]# make install    #安装
[root@nginx-server nginx-1.18.0]# /usr/local/nginx/sbin/nginx    #启动nginx

2、已安装nginx的情况下安装第三方模块

[root@nginx-server ~]# nginx -V    #查看之前的安装信息
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
configure arguments: --prefix=/usr/local/nginx    #这条便是上次安装所配置的参数,可以复制使用哦!

[root@nginx-server nginx-1.18.0]# ./configure \    #重新进行编译配置
> --prefix=/usr/local/nginx/ \
> --add-module=/usr/local/src/echo-nginx-module-0.62    #安装第三方模块
[root@nginx-server nginx-1.18.0]# make    #编译,切记没有make install
[root@nginx-server nginx-1.18.0]# cp objs/nginx /usr/local/nginx/sbin/nginx    #将编译目录下objs/nginx文件直接覆盖老的 nginx文件
cp:是否覆盖"/usr/local/nginx/sbin/nginx"? y
[root@nginx-server nginx-1.18.0]# /usr/local/nginx/sbin/nginx -s reload    #重载nginx

  tips:重新编译的时候,记得使用nginx -V查看之前的配置,把以前编译过的模块一同加到configure参数中。

二、平滑升级

1、什么是平滑升级?

  平滑升级是指在线上业务不停止的情况下,进行nginx的升级。nginx方便的帮助我们实现平滑升级,其过程简单概括,就是:
     在不停掉老进程的情况下,启动新进程。
     老进程负责处理任然没有处理完的请求,但不在接受处理请求。
     新进程接受新请求。
     老进程处理完所有请求,关闭所有连接后停止。
     这样就很方便的实现了平滑升级。一般有两种情况下需要升级nginx,一种是确实需要升级nginx的新版本,另一种是要为nginx添加新模块。

2、信号的接受和处理

① 主进程支持的信号

信 号 解 释
TERM,INT 立即退出
QUIT 等待工作进程结束后再退出
KILL 强制终止进程
HUP 重新加载配置文件,使用新的配置文件启动进程,并逐步关闭旧进程
USR1 重新打开日志文件
USR2 启动新的主进程,实现热升级
WINCH 逐步关闭工作进程

② 工作进程支持的信号

信 号 解 释
TERM,INT 立即退出
QUIT 等待请求结束后在退出
USR1 重新打开日志文件

3、实例

  注:本篇以 Nginx-1.14.2 → Nginx-1.18.0 为例进行演示。


  ① 处理防火墙

[root@nginx-server ~]# systemctl stop firewalld    #关闭firewalld防火墙
[root@nginx-server ~]# systemctl disable firewalld    #开机不自启
[root@nginx-server ~]# setenforce 0    #关闭selinux防火墙(临时生效)
[root@nginx-server ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config    #关闭selinux防火墙(永久生效,通常需要重启生效,这里与临时生效配合使用,相当于开机不自启)

  ② 编译安装nginx-1.14.2

#安装依赖
[root@nginx-server ~]# yum install gcc-c++ openssl openssl-devel zlib zlib-devel pcre pcre-devel -y

#将rpm包下载到/usr/local/src/目录下
[root@nginx-server ~]# cd /usr/local/src/    //进入/usr/local/src目录下
[root@nginx-server src]# [root@localhost ~]# wget http://nginx.org/download/nginx-1.14.2.tar.gz   //下载rpm包

#进行安装前的准备
[root@nginx-server src]# groupadd -r nginx    //创建nginx用户组
[root@nginx-server src]# useradd -r -g nginx nginx    //创建nginx用户
[root@nginx-server src]# tar zxvf nginx-1.14.2.tar.gz -C /usr/local/src    //解压安装包

#进行安装
[root@nginx-server src]# cd nginx-1.14.2
[root@nginx-server src]# ./configure --prefix=/opt/data/nginx --user=nginx --group=nginx --with-http_stub_status_module    //配置
[root@nginx-server nginx-1.14.2]# make && make install    //编译并安装

#启动nginx
[root@server03 nginx-1.14.2]# /opt/data/nginx/sbin/nginx

#查看是否启动成功
[root@server03 nginx-1.14.2]# ps -ef | grep nginx
root       9783      1  0 16:54 ?        00:00:00 nginx: master process /opt/data/nginx/sbin/nginx
nginx      9784   9783  0 16:54 ?        00:00:00 nginx: worker process
root       9792   7097  0 16:54 pts/0    00:00:00 grep --color=auto nginx

  ③ 查看已安装nginx的版本及安装模块

[root@server03 nginx-1.14.2]# /opt/data/nginx/sbin/nginx -V
nginx version: nginx/1.14.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
configure arguments: --prefix=/opt/data/nginx --user=nginx --group=nginx --with-http_stub_status_module

  ④ 备份已安装nginx文件

[root@nginx-server ~]# cp /opt/data/nginx/sbin/nginx /opt/data/nginx/sbin/nginx_$(date '+%F')
[root@nginx-server ~]# cp /opt/data/nginx/conf/nginx.conf /opt/data/nginx/conf/nginx.conf_$(date '+%F')

  ⑤ 模拟工作状态

#用另一个终端进行脚本循环测试,让nginx一直处于工作状态
[root@server01 ~]# while true ;do curl 192.168.140.131 ;sleep 5 ;done

  ⑥ 编译安装nginx-1.18.0

#将rpm包下载到/usr/local/src/目录下
[root@nginx-server ~]# cd /usr/local/src/    //进入/usr/local/src目录下
[root@nginx-server src]# wget http://nginx.org/download/nginx-1.18.0.tar.gz   //下载rpm包

#进行安装
[root@nginx-server src]# cd nginx-1.18.0
[root@nginx-server nginx-1.18.0]# ./configure --prefix=/opt/data/nginx --user=nginx --group=nginx --with-http_stub_status_module    //配置
[root@nginx-server nginx-1.18.0]# make && make install    //编译并安装

  ⑦ 发送USR2信号

#向主进程发送USR2信号,Nginx会启动一个新版本的Master进程和工作进程,和旧版本一起处理请求。
[root@nginx-server nginx-1.18.0]# ps -ef | grep nginx | grep -v grep
root       9783      1  0 16:54 ?        00:00:00 nginx: master process /opt/data/nginx/sbin/nginx    #主进程
nginx      9784   9783  0 16:54 ?        00:00:00 nginx: worker process
[root@nginx-server nginx-1.18.0]# kill -USR2 9783
[root@nginx-server nginx-1.18.0]# ps -ef | grep nginx | grep -v grep
root       9783      1  0 16:54 ?        00:00:00 nginx: master process /opt/data/nginx/sbin/nginx
nginx      9784   9783  0 16:54 ?        00:00:00 nginx: worker process
root      12462   9783  0 17:11 ?        00:00:00 nginx: master process /opt/data/nginx/sbin/nginx
nginx     12463  12462  0 17:11 ?        00:00:00 nginx: worker process

  ⑧ 发送WINCH信号

#向原Nginx主进程发送WINCH信号,它会逐步关闭其下的工作进程(主进程不退出),这时所有请求都会由新版本处理。
[root@nginx-server nginx-1.18.0]# kill -WINCH 9783
[root@nginx-server nginx-1.18.0]# ps -ef | grep nginx | grep -v grep    #原nginx的工作进程已经退出
root       9783      1  0 16:54 ?        00:00:00 nginx: master process /opt/data/nginx/sbin/nginx
root      12462   9783  0 17:11 ?        00:00:00 nginx: master process /opt/data/nginx/sbin/nginx
nginx     12463  12462  0 17:11 ?        00:00:00 nginx: worker process

  ⑨ 发送HUP信号(非必须,看情况)

#如果需要回滚操作,可向原Nginx主进程发送HUP信号,它会重新启动工作进程,仍使用旧版本配置文件。然后可以将新版本Nginx进程杀死(使用QUIT,TERM,或者KIll)

  ⑩ 杀死原Nginx主进程,升级结束

[root@nginx-server nginx-1.18.0]# kill 9783    #杀死原Nginx主进程
[root@nginx-server nginx-1.18.0]# ps -ef | grep nginx | grep -v grep
root      12462      1  0 17:11 ?        00:00:00 nginx: master process /opt/data/nginx/sbin/nginx
nginx     12463  12462  0 17:11 ?        00:00:00 nginx: worker process
[root@nginx-server nginx-1.18.0]# /opt/data/nginx/sbin/nginx -V    #查看现在的Nginx版本
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
configure arguments: --prefix=/opt/data/nginx --user=nginx --group=nginx --with-http_stub_status_module

你可能感兴趣的:(Web,nginx,linux,运维)