Nginx版本升级

CentOs7安装nginx【详细】

nginx版本升级:从nginx1.16.1升级到nginx1.18.0,以及升级失败如何回退


Nginx安装

安装Nginx所需要环境

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

创建nginx目录

mkdir -p /usr/local/nginx

下载nginx包

wget https://nginx.org/download/nginx-1.18.0.tar.gz

解压缩

tar -zxvf nginx-1.18.0.tar.gz

进入目录并配置nginx

cd nginx-1.18.0/

带https模块

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
  • --prefix属于nginx编译后目录位置

编译&安装

make
make install 

启动/关闭nginx服务

/usr/local/nginx/sbin目录下

./nginx
nginx -s reload
#快速关闭nginx(立即关闭不等待未处理完请求)
./nginx -s stop

#优雅关闭nginx(等待请求处理完)
./nginx -s quit

Nginx服务启动成功截图

Nginx 注册为系统服务

Linux 安装 Nginx 并配置为系统服务(超详细)

创建nginx服务

vi /etc/systemd/system/nginx.service
[Unit]
Description=Nginx HTTP Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

重新加载配置文件

systemctl daemon-reload

配置nginx开机启动

systemctl enable nginx

启动nginx命令

systemctl start nginx

nginx的其他命令

systemctl status nginx
systemctl stop nginx
systemctl restart nginx

问题记录

nginx: [error] invalid PID number ““ in “/run/nginx.pid“

几种方法解决Nginx错误:nginx: [error] invalid PID number ““ in “/run/nginx.pid“

方法一

nginx -c /etc/nginx/nginx.conf
nginx -s reload

方法二

ps -aux | grep "nginx: master process"
echo 主进程PID > /run/nginx.pid

Nginx版本升级

查看旧版本Nginx1.18版本

注意V大写

./nginx -V

以下是旧的nginx配置,在新的nginx配置需要如下参数项:

configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module


(ps:截图来源其他nginx服务器配置,仅参考)

配置新的Nginx1.24版本

新下载的Nginx1.24在执行./configure的时候--prefix指定的目录是需要指向旧的Nginx1.18

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

执行编译

注意:仅执行编译make,升级不需要执行make install命令

#make编译之后,在nginx1.24的objs目录下才有nginx执行文件
make

平滑升级,将旧Nginx1.18的文件备份

此处操作在目录:/usr/local/nginx

cp nginx{,.bak}

使用新的Nginx1.24的nginx文件强制覆盖旧的Nginx1.18的nginx文件

此处操作在目录nginx-1.24.0/objs

cp -f nginx /usr/local/nginx/sbin/nginx

查看当前nginx进程

此处nginx进程属于旧的Nginx1.18

ps aux | grep nginx

对nginx的父进程号发送USR2信号

设定新的子进程开始接收用户的访问请求,旧的不再接受用户的访问请求

kill -USR2 8559

再次查看nginx进程

ps aux | grep nginx

可查看旧进程依旧处于监听状态

(当前步骤可忽略,仅表示当前旧nginx进程依然存在)

lsof -p 8559 | grep LISTEN

关闭旧nginx进程

worker进程被关闭

kill -WINCH 8559

确定升级没有任何问题的话,把master进程给关闭

注意:是确认无误后才执行操作,否则将导致平滑升级无法回退情况发生

kill -QUIT 8559

再次查看Nginx版本

此处操作在目录:/usr/local/nginx

./nginx -V


Nginx升级失败,版本回退

  1. 强制覆盖nginx文件,使用旧的版本的nginx

    此处操作在目录:/usr/local/nginx

    mv nginx.bak  nginx
  2. 旧版本nginx进程发送HUP信号

    注意: 这是旧版本的nginx进程pid号

    kill -HUP 8559

截图为旧nginx已唤起的worker进程

  1. 新版本的服务停止接收用户请求
kill -USR2 8603
  1. 进行新版本服务进程的关闭
kill -WINCH 8603
  1. kill掉nginx新进程
kill -QUIT 8603