参考文章:

1、http://www.linuxde.net/2011/08/554.html

2、http://www.cnblogs.com/sayou/p/3711918.html


目前老的nginx正在运行中,我们要进行nginx执行文件的替换。下面我记录一下我的操作:

1、下载一个新版本的nginx源码包儿解压,写好参数比如./configure --prefix=/usr/local/ --with-http_mp4_module --with-http_flv_module 然后执行make,但不make install。或者将同一个版本的nginx的源码包更新参数,比如增加一个模块--with-http_stub_status_module然后make,还是一样不要执行make install


2、替换nginx执行文件。

备份原nginx执行文件

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/1.10.0_nginx


进入源码包所在目录下的objs目录,将nginx文件复制到/usr/local/nginx/sbin/

cp /tmp/nginx-1.11.3/objs/nginx /usr/local/nginx/sbin/


3、旧的请求,继续由旧执行文件处理,新的请求统统由新程序执行。

新执行文件启动,生成新进程号,新旧的进程共存!

kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

或kill -12 `cat /usr/local/nginx/logs/nginx.pid`

新来的请求统统由新程序处理,老的连接还继续由老程序处理。

kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin`

或kill -28 `cat /usr/local/nginx/logs/nginx.pid.oldbin`

愣一段儿时间,你觉得没有人还在用旧的程序了。时机到了,彻底弃用旧程序!

kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

或kill -3 `cat /usr/local/nginx/logs/nginx.pid.oldbin`

就算不去kill旧的nginx进程也会在所有请求都处理完毕了自动退出。所以也可以不执行kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`