如何平滑升级Nginx

有朋友需要,所以就简单写了个教程,步骤也比较详细。有需要的可以看看

准备工作

下载最新版Nginx,并解压

1
2
3
$ cd /usr/local/src
$ wget http://nginx.org/download/nginx-1.6.0.tar.gz
$ tar zxvf nginx-1.6.0.tar.gz

下载安装pcre:

1
2
3
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz 
$ tar -zxvf pcre-8.34.tar.gz
$ cd pcre-8.34

下载安装zlib:

1
2
3
4
$ cd /usr/local/src
$ wget http://zlib.net/zlib-1.2.8.tar.gz
$ tar -zxvf zlib-1.2.8.tar.gz
$ cd zlib-1.2.8

下载安装openssl:

1
2
3
4
$ cd /usr/local/src
$ wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
$ tar -zxvf openssl-1.0.1c.tar.gz
$ cd openssl-1.0.1c

进入 Nginx 目录,加上所需参数开始编译:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ./configure \
--prefix=/usr/local/nginx \
--user=www \
--group=www \
--with-http_stub_status_module \
--with-http_v2_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-openssl=../openssl \
--with-pcre=../pcre-8.41 \
--with-zlib=../zlib-1.2.8

编译

只执行 make 编译,不要执行 make install

1
$ make

替换 Nginx 二进制文件

1
2
3
4
# 重命名nginx旧版本二进制文件,即sbin目录下的nginx(期间nginx并不会停止服务!):
$ mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
# 拷贝一份新编译的二进制文件:
$ cp objs/nginx /usr/local/nginx/sbin/

升级

在源码目录执行 make upgrade 开始升级

1
$ make upgrade

!!!注意!!!

如果执行 make upgrade 出错,一般情况是 nginx.pid 文件路径和脚本路径不对应造成的,出现这种情况,编辑 Makefile 文件,将 nginx.pid 文件路径改成你当前系统中 nginx.pid 路径即可!脚本中的路径一般是 /usr/local/nginx/logs/nginx.pid 系统中路径一般是 /var/run/nginx.pid ,按照下边方法根据实际情况修改

查看下编译脚本 upgrade 条目下内容并根据实际情况修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  ## 修改前
upgrade:
/usr/local/nginx/sbin/nginx -t

kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin

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

## 修改后
upgrade:
/usr/local/nginx/sbin/nginx -t

kill -USR2 `cat /var/run/nginx.pid`
sleep 1
test -f /var/run/nginx.pid.oldbin

kill -QUIT `cat /var/run/nginx.pid.oldbin`

确认

确认一下nginx进程,可以发现有2个主进程

1
$ ps aux | grep nginx

最后确认一下 nginx -V

1
$ /usr/local/nginx/sbin/nginx -V

升级成功

本文作者:Drixn

本文链接:https://www.drixn.com/105.html

版权申明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

文章有些内容具有时效性,如有问题,可留言联系博主!