(1)升级和安装nginx第三方模块一样,需要查看原来安装nginx的版本以及编译的参数:
[root@ittestserver1 opt]# /usr/local/nginx2/sbin/nginx -V
nginx version: nginx/1.10.3
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.1.0e 16 Feb 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx2 --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_stub_status_module --with-http_v2_module --with-openssl=/tmp/install/openssl-1.1.0e --with-http_v2_module
(2)下载要升级的nginx版本
[root@ittestserver1 soft]# wget http://nginx.org/download/nginx-1.12.1.tar.gz
--2017-07-17 15:41:24-- http://nginx.org/download/nginx-1.12.1.tar.gz
正在解析主机 nginx.org... 206.251.255.63, 95.211.80.227, 2001:1af8:4060:a004:21::e3, ...
正在连接 nginx.org|206.251.255.63|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:981093 (958K) [application/octet-stream]
正在保存至: “nginx-1.12.1.tar.gz”
90% [=================================================> ] 892,302 265K/s eta(英国中部时100%[======================================================>] 981,093 291K/s in 3.3s
2017-07-17 15:41:28 (291 KB/s) - 已保存 “nginx-1.12.1.tar.gz” [981093/981093])
(3)解压ningx下载的压缩包编译make,切记不要make install。
[root@ittestserver1 soft]# tar xf nginx-1.12.1.tar.gz
[root@ittestserver1 soft]# cd nginx-1.12.1
[root@ittestserver1 nginx-1.12.1]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
[root@ittestserver1 nginx-1.12.1]# ./configure --prefix=/usr/local/nginx2 \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_stub_status_module \
--with-http_v2_module \
--with-openssl=/tmp/install/openssl-1.1.0e \
--with-http_v2_module
checking for OS
+ Linux 2.6.32-358.el6.x86_64 x86_64
checking for C compiler ... found
+ using GNU C compiler
+ gcc version: 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
checking for gcc -pipe switch ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for gcc builtin 64 bit byteswap ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for openat(), fstatat() ... found
checking for getaddrinfo() ... found
checking for PCRE library ... found
checking for PCRE JIT support ... found
checking for zlib library ... found
creating objs/Makefile
Configuration summary
+ using system PCRE library
+ using OpenSSL library: /tmp/install/openssl-1.1.0e
+ using system zlib library
nginx path prefix: "/usr/local/nginx2"
nginx binary file: "/usr/local/nginx2/sbin/nginx"
nginx modules path: "/usr/local/nginx2/modules"
nginx configuration prefix: "/usr/local/nginx2/conf"
nginx configuration file: "/usr/local/nginx2/conf/nginx.conf"
nginx pid file: "/usr/local/nginx2/logs/nginx.pid"
nginx error log file: "/usr/local/nginx2/logs/error.log"
nginx http access log file: "/usr/local/nginx2/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
[root@ittestserver1 nginx-1.12.1]# make
由于make的时间比较长,需要稍等下。
(4)make编译完后会在安装目录下生成一个objs目录且在该目录下有一个nginx执行文件。
[root@ittestserver1 nginx-1.12.1]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
[root@ittestserver1 nginx-1.12.1]# ll objs/
总用量 7124
-rw-r--r-- 1 root root 17459 7月 17 15:48 autoconf.err
-rw-r--r-- 1 root root 43530 7月 17 15:48 Makefile
-rwxr-xr-x 1 root root 7152312 7月 17 15:51 nginx
-rw-r--r-- 1 root root 5345 7月 17 15:51 nginx.8
-rw-r--r-- 1 root root 7066 7月 17 15:48 ngx_auto_config.h
-rw-r--r-- 1 root root 657 7月 17 15:48 ngx_auto_headers.h
-rw-r--r-- 1 root root 6242 7月 17 15:48 ngx_modules.c
-rw-r--r-- 1 root root 38232 7月 17 15:51 ngx_modules.o
drwxr-xr-x 9 root root 4096 7月 17 15:48 src
(5)备份原来老的nginx文件
[root@ittestserver1 nginx-1.12.1]# mv /usr/local/nginx2/sbin/nginx /usr/local/nginx2/sbin/nginx.bak
[root@ittestserver1 nginx-1.12.1]# cp objs/nginx
nginx nginx.8
[root@ittestserver1 nginx-1.12.1]# cp objs/nginx /usr/local/nginx2/sbin/
[root@ittestserver1 nginx-1.12.1]# /usr/local/nginx2/sbin/nginx -t
nginx: the configuration file /usr/local/nginx2/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx2/conf/nginx.conf test is successful
(6)使用make upgrade替换老的nginx进程
[root@ittestserver1 nginx-1.12.1]# make upgrade
/usr/local/nginx2/sbin/nginx -t
nginx: the configuration file /usr/local/nginx2/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx2/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx2/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx2/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx2/logs/nginx.pid.oldbin`
(7)执行/usr/local/nginx2/sbin/nginx -V查看nginx最新的版本及编译的参数
[root@ittestserver1 nginx-1.12.1]# /usr/local/nginx2/sbin/nginx -V
nginx version: nginx/1.12.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
built with OpenSSL 1.1.0e 16 Feb 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx2 --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_stub_status_module --with-http_v2_module --with-openssl=/tmp/install/openssl-1.1.0e --with-http_v2_module
至此升级完成。
内容转自 https://blog.51cto.com/liqingbiao/1948430
另外一篇也可以学习下 https://www.cnblogs.com/liuqiang0/p/8528009.html
以下是我自己亲自的实验,举例有点不恰当,其实是nginx的降级实验。
在我本地虚拟机已经安装了一个1.13.1,安装目录为/usr/local/nginx
下载一个1.12.1版本的nginx,并且也安装在/usr/local/nginx目录
wget http://nginx.org/download/nginx-1.12.1.tar.gz
tar -zxvf nginx-1.12.1.tar.gz
cd nginx-1.12.1
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_stub_status_module --with-http_v2_module --with-http_v2_module
make
make install
我这里其实已经执行了make install,上面文章其实说不要执行make install
查看当前进程
[root@localhost nginx]# ps -ef|grep nginx |grep -v grep
root 114658 1 0 14:57 ? 00:00:00 nginx: master process ./nginx/sbin/nginx
nobody 117928 114658 0 15:03 ? 00:00:00 nginx: worker process
发送USR2信号
[root@localhost nginx-1.12.1]# kill -USR2 114658
[root@localhost nginx-1.12.1]# ps -ef|grep nginx |grep -v grep
root 114658 1 0 14:57 ? 00:00:00 nginx: master process ./nginx/sbin/nginx
nobody 117928 114658 0 15:03 ? 00:00:00 nginx: worker process
root 118136 114658 0 15:05 ? 00:00:00 nginx: master process ./nginx/sbin/nginx
nobody 118137 118136 0 15:05 ? 00:00:00 nginx: worker process
多出了一个新的master进程118136
[root@localhost nginx]# cd logs/
[root@localhost logs]# ls
access.log error.log nginx.pid nginx.pid.oldbin
同时旧的pid文件变成了nginx.pid.oldbin,同时多出了一个新的nginx.pid
假设我们不想升级了,kill -QUIT 新的master进程即可,同时nginx.pid.oldbin被恢复成nginx.pid
[root@localhost logs]# kill -QUIT 118136
[root@localhost logs]# ls
access.log error.log nginx.pid
假设我们需要升级,kill -QUIT 旧的master进程即可
[root@localhost logs]# kill -QUIT 114658
[root@localhost logs]# ps -ef|grep nginx|grep -v grep
root 119479 1 0 15:23 ? 00:00:00 nginx: master process ./nginx/sbin/nginx
nobody 119480 119479 0 15:23 ? 00:00:00 nginx: worker process