nginx平滑升级与nginx模块安装

发布时间:2020-02-12编辑:脚本学堂
介绍下nginx平滑升级的方法,以及在nginx中安新模块的具体步骤,有需要的朋友参考下。

如何在不影响正常运行的情况下,对nginx将平滑升级到新版本,以及为nginx安装新的模块,且看本文的介绍。

1、查看原版本及已安装模块和进程号
 

复制代码 代码示例:

[root@jbxue pkg]# ps aux|grep nginx
root   26604 0.0 0.5 5724 1312   ?  Ss Oct09 0:00 nginx: master process /opt/nginx/sbin/nginx
nobody 26709 0.0 0.5 5912 1496   ?  S  Oct09 0:00 nginx: worker process
root   16331 0.0 0.2 4016 572 pts/0 S+ 09:39 0:00 grep nginx

[root@jbxue pkg]# /opt/nginx/sbin/nginx -V
 nginx version: nginx/0.8.52
built by gcc 3.4.6 20060404 (Red Hat 3.4.6-3)
TLS SNI support disabled
 
configure arguments: --prefix=/opt/nginx --with-http_ssl_module --with-http_sub_module --with-http_gzip_static_module
--with-http_stub_status_module --with-http_flv_module --with-http_realip_module --with-debug

2、下载新版本
 

复制代码 代码示例:
[root@jbxue ~]# wget http://nginx.org/download/nginx-0.8.53.tar.gz

3、备份旧版本的执行程序
 

复制代码 代码示例:
[root@jbxue ~]# cp /opt/nginx/sbin /appstore

4、编译新版本,增删模块
测试增加–with-http_dav_module
 

复制代码 代码示例:
[root@jbxue ~]# tar zxvf nginx-0.8.53.tar.gz
[root@jbxue ~]# cd nginx-0.8.53
 
[root@jbxue ~]# ./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_sub_module --with-http_gzip_static_module
--with-http_stub_status_module --with-http_flv_module --with-http_realip_module --with-http_dav_module --with-debug
 
[root@jbxue ~]# make
[root@jbxue ~]# make install

5、替换
 

复制代码 代码示例:
[root@jbxue ~]# kill -USR2 26604
 

此时旧版本的nginx的主进程将重命名他的.pid文件为.oldbin。
然后,会执行新版本的nginx可执行程序,一次启动新的主进程和新的工作进程。
 

复制代码 代码示例:
[root@jbxue ~]# ll /opt/nginx/logs/nginx*
-rw-r--r-- 1 root root 6 Oct 25 09:49 /opt/nginx/logs/nginx.pid
-rw-r--r-- 1 root root 6 Oct  9 10:19 /opt/nginx/logs/nginx.pid.oldbin
 
[root@jbxue ~]# ps aux|grep nginx
root   26604 0.0 0.5 5724 1324   ?  Ss Oct09 0:00 nginx: master process /opt/nginx/sbin/nginx
root   18483 0.0 0.7 4636 1824   ?  S  09:49 0:00 nginx: master process /opt/nginx/sbin/nginx
nobody 18484 0.0 0.4 4852 1052   ?  S  09:49 0:00 nginx: worker process
root   18527 0.0 0.2 5352 572 pts/1 S+ 09:58 0:00 grep nginx
 

此时,新、旧版本的nginx会同事运行,共同处理输入的请求。
要逐步停止旧版本的nginx,必须发现欧诺个WINCH信号给旧的进程,然后,其工作进程将开始从容关闭。
 

复制代码 代码示例:
[root@jbxue ~]# kill -WINCH 26604

一段时间之后,旧的工作进程(worker process)处理了所有已连击的请求后推出,仅由新的工作进程(worker process)来处理请求了(可以查看对比新旧工作进程的进程
号来判断)

由于测试时几乎没什么链接,所以一下子就切换过去了。
正式生产环境可以看的出来。

此时可以选择是保留新的版本还是旧的版本。

查看nginx版本和安装的模块:
 

复制代码 代码示例:
[root@jbxue ~]# /opt/nginx/sbin/nginx -V
nginx version: nginx/0.8.53
built by gcc 3.4.6 20060404 (Red Hat 3.4.6-3)
TLS SNI support disabled
configure arguments: --prefix=/opt/nginx --with-http_ssl_module --with-http_sub_module --with-http_gzip_static_module
--with-http_stub_status_module --with-http_flv_module --with-http_realip_module --with-http_dav_module --with-debug