如何在不影响正常运行的情况下,对nginx将平滑升级到新版本,以及为nginx安装新的模块,且看本文的介绍。
1、查看原版本及已安装模块和进程号
复制代码代码示例:
[root@jbxue pkg]# ps aux|grep nginx
[root@jbxue pkg]# /opt/nginx/sbin/nginx -V
2、下载新版本
复制代码代码示例:
[root@jbxue ~]# wget http://nginx.org/download/nginx-0.8.53.tar.gz
3、备份旧版本的执行程序
复制代码代码示例:
[root@jbxue ~]# cp /opt/nginx/sbin /appstore
4、编译新版本,增删模块
复制代码代码示例:
[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。
复制代码代码示例:
[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会同事运行,共同处理输入的请求。
复制代码代码示例:
[root@jbxue ~]# kill -WINCH 26604
一段时间之后,旧的工作进程(worker process)处理了所有已连击的请求后推出,仅由新的工作进程(worker process)来处理请求了(可以查看对比新旧工作进程的进程
由于测试时几乎没什么链接,所以一下子就切换过去了。 此时可以选择是保留新的版本还是旧的版本。
查看nginx版本和安装的模块:
复制代码代码示例:
[root@jbxue ~]# /opt/nginx/sbin/nginx -V
(责任编辑:IT)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 |