Nginx生产环境下如何进行平滑升级

前言,最近工作遇到了nginx版本升级的情况。原生产环境版本是1.16.1

  1. 下载所需版本

1.下载所需版本(nginx-1.23.3.tar.gz)建议使用稳定版当前稳定版nginx-1.22.1

地址:http://nginx.org/en/download.html

Nginx生产环境下如何进行平滑升级_第1张图片
  1. 获取旧版配置信息

/usr/local/nginx/sbin/nginx -V #nginx可执行文件所在目录
Nginx生产环境下如何进行平滑升级_第2张图片

  1. 查看旧版nginx进程号

ps -ef | grep nginx

  1. 编译新版nginx

1、tar -zxvf nginx-1.22.1.tar.gz
2、cd nginx-1.22.1
#第3步执行时可能会出错,问题不大,根据报错信息下载相应包后再次执行即可
#可能需要的包有
    yum -y install libxml2 libxml2-dev
    yum -y install libxslt-devel
    yum install gd gd-devel
    yum install -y gperftools-devel
3、 ./configure --prefix=  #原nginx配置信息
4、make  #只编译不安装。编译完成后会在该目录下生成一个objs目录

  1. 备份旧版nginx可执行文件

cp objs/nginx /usr/local/nginx/sbin/

  1. 将新版的nginx可执行文件复制到旧版目录下

cp objs/nginx /usr/local/nginx/sbin/

7.平滑升级

Nginx对进程的控制能力非常强大,可以通过信号指令控制进程。常用的信号有:

-QUIT,表处理完当前请求后,关闭进程。

-HUP,表示重新加载配置,也就是关闭原有的进程,并开启新的工作进程。此操作不会中断用户的访问请求,因此可以通过此信号平滑的重启Nginx。

-USR2,用于平滑升级可执行程序。

-WINCH,从容关闭工作进程。

(1)平滑升级可执行程序

kill -USR2 3611926 (nginx旧的主进程)

(2)关闭旧的nginx进程

 kill -WINCH 3611926

  1. 验证是否成功

1)nginx -v

查看运行版本

2)nginx -t

#nginx -t可能会遇到的问题
(1)nginx: [emerg] module "/usr/lib64/nginx/modules/ngx_http_image_filter_module.so" version 1016001 instead of 1022001 in /usr/share/nginx/modules/mod-http-image-filter.conf
解决办法:
mv /usr/lib64/nginx/modules/ngx_http_image_filter_module.so /usr/lib64/nginx/modules/ngx_http_image_filter_module.so.old
cp ngx_http_image_filter_module.so /usr/lib64/nginx/modules/
(2)nginx: [emerg] module "/usr/lib64/nginx/modules/ngx_http_perl_module.so" version 1016001 instead of 1022001 in /usr/share/nginx/modules/mod-http-perl.conf
解决办法:
mv /usr/lib64/nginx/modules/ngx_http_perl_module.so /usr/lib64/nginx/modules/ngx_http_perl_module.so.old
cp ngx_http_perl_module.so /usr/lib64/nginx/modules/
(3)nginx: [emerg] module "/usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so" version 1016001 instead of 1022001 in /usr/share/nginx/modules/mod-http-xslt-filter.conf
解决办法:
mv /usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so /usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so.old
cp ngx_http_xslt_filter_module.so /usr/lib64/nginx/modules/
(4)nginx: [emerg] module "/usr/lib64/nginx/modules/ngx_mail_module.so" version 1016001 instead of 1022001 in /usr/share/nginx/modules/mod-mail.conf:1
解决办法:
mv /usr/lib64/nginx/modules/ngx_mail_module.so /usr/lib64/nginx/modules/ngx_mail_module.so.old
cp ngx_mail_module.so /usr/lib64/nginx/modules/
(5)nginx: [emerg] dlopen() "/usr/lib64/nginx/modules/ngx_stream_module.so" failed (/usr/lib64/nginx/modules/ngx_stream_module.so: undefined symbol: pcre_exec) in /usr/share/nginx/modules/mod-stream.conf:1
解决办法:
mv /usr/lib64/nginx/modules/ngx_stream_module.so /usr/lib64/nginx/modules/ngx_stream_module.so.old
cp ngx_stream_module.so /usr/lib64/nginx/modules/
(6)nginx: [alert] version 1.22.1 of nginx.pm is required, but 1.16.1 was found
解决办法:
mv /usr/lib64/perl5/vendor_perl/auto/nginx/nginx.so /usr/lib64/perl5/vendor_perl/auto/nginx/nginx.so.old
cp /www/nginx-1.22.1/objs/src/http/modules/perl/blib/arch/auto/nginx/nginx.so /usr/lib64/perl5/vendor_perl/auto/nginx/
(7)nginx object version 1.22.1 does not match bootstrap parameter 1.16.1 at /usr/share/perl5/XSLoader.pm line 111.
Compilation failed in require.
BEGIN failed--compilation aborted.
nginx: [alert] perl_parse() failed: 2
nginx: configuration file /etc/nginx/nginx.conf test failed
解决办法:
mv /usr/lib64/perl5/vendor_perl/nginx.pm /usr/lib64/perl5/vendor_perl/nginx.pm.old
cp /www/nginx-1.22.1/objs/src/http/modules/perl/nginx.pm /usr/lib64/perl5/vendor_perl/

3)nginx -s reload

可能会出现的问题
nginx: [error] invalid PID number "" in "/var/run/nginx.pid"
解决办法:nginx -c /etc/nginx/nginx.conf

你可能感兴趣的:(linux日常运维问题记录,linux,运维,nginx)