欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-08-27 21:50:16
添加第三方模块及平滑升级...

一、安装第三方模块

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

  ⑦ 发送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

本文地址:https://blog.csdn.net/weixin_43898125/article/details/108072445