首先获取两个 nginx 源码包
nginx-1.4.7.tar.gz
nginx-1.6.2.tar.gz
------------安装nginx----------
# yum install -y gcc gcc-c++ make //安装gcc由于实验环境缺少编译工具
# yum install -y pcre-devel zlib-devel // nginx rewrite gzip 需要依赖的库
解压nginx
# tar -xzvf nginx-1.4.7.tar.gz
# cd nginx-1.4.7
# ./configure --prefix=/usr/local/nginx //简单安装,生产环境勿模仿(ˉ﹃ˉ)
成功会提示类似以下信息
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ using builtin md5 code
+ sha1 library is not found
+ using system zlib library
然后执行
# make && make install //编译 、安装
# cd /usr/local/nginx //进入nginx 目录
#./sbin/nginx -c ./conf/nginx.conf //让nginx加载配置文件并启动
# ps aux | grep nginx //nginx 进程已经启动
root 7012 0.0 0.1 19824 604 ? Ss 09:35 0:00 nginx: master process ./sbin/nginx -c ./conf/nginx.conf
nobody 7013 0.0 0.2 20220 1176 ? S 09:35 0:00 nginx: worker process
测试访问下本地web ,会有如下提示 因为我们没有配置所以是默认的页面,注意iptables 规则
# elinks --dump http://localhost
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
---------到此安装结束-------以下是平滑升级-------
nginx 信号:
QUIT 执行完当前的请求后退出
HUP 重新加载配置文件,平滑重启
USR1 重新打开日志文件
USR2 平滑升级 nginx 二进制文件
WINCH 优雅的关闭worker进程
注意 :既然是平滑升级当然不需要重启服务或者暂停web服务
# cd /usr/local/nginx/
# ./sbin/nginx -V //查看当前nginx版本与配置参数
nginx version: nginx/1.4.7
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
configure arguments: --prefix=/usr/local/nginx //以前版本的配置信息
去解压我们更高版本的nginx
# tar -xzvf nginx-1.6.2.tar.gz
# cd nginx-1.6.2
# ./configure --prefix=/usr/local/nginx/ //注意:这里引用1.4.x 版本 nginx -V 命令查看
的配置信息
# make //这里只有make 没有make install
# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old //改变原理程序的名字
# cp ./objs/nginx /usr/local/nginx/sbin/ //把新程序copy过去
此时注意进程
# ps aux | grep nginx | grep -v ‘grep‘
root 7012 0.0 0.1 19824 604 ? Ss 09:35 0:00 nginx: master process ./sbin/nginx -c ./conf/nginx.conf
nobody 7013 0.0 0.2 20220 1408 ? S 09:35 0:00 nginx: worker process
此时的nginx pid 为 7012
# cd /usr/local/nginx/
# kill -USR2 ./log/nginx.pid //给旧进程发信号,他会把自己的pid文件改为nginx.pid.oldbin
#cat ./logs/nginx.pid.oldbin //此时旧进程的pid文件已经变了
7012
# ps aux | grep nginx | grep -v ‘grep‘ //此时两个进程一起工作
root 7012 0.0 0.1 19824 704 ? Ss 09:35 0:00 nginx: master process ./sbin/nginx -c ./conf/nginx.conf
nobody 7013 0.0 0.2 20220 1408 ? S 09:35 0:00 nginx: worker process
root 9243 0.0 0.2 19832 1424 ? S 10:03 0:00 nginx: master process ./sbin/nginx -c ./conf/nginx.conf
nobody 9244 0.0 0.2 20256 1200 ? S 10:03 0:00 nginx: worker process
# kill -QUIT `cat ./logs/nginx.pid.oldbin` //让旧的进程退出
[[email protected] nginx]# ps aux | grep nginx | grep -v ‘grep‘ //只剩下新的进程了
root 9243 0.0 0.2 19832 1424 ? S 10:03 0:00 nginx: master process ./sbin/nginx -c ./conf/nginx.conf
nobody 9244 0.0 0.2 20256 1200 ? S 10:03 0:00 nginx: worker process
# elinks --dump http://localhost/test //此时我们故意用错URL报错信息显示是新版本
404 Not Found
--------------------------------------------------------------------------
nginx/1.6.2
平滑升级到此结束
end .