您现在的位置是:首页 > 技术文章

Nginx1.11之前版本升级到Nginx1.16稳定版本

博主:紫藤心-迷途    浏览次数:1429次

Nginx1.11升级到Nginx1.16稳定版本
环境说明
客户需要安装SSL证书
服务器目前正在运行Nginx1.11版本,由于需要安装SSL证书但是当前运行的Nginx服务的版本不支持SSL,所以不得已就需要给客户进行不停止的前提下经行升级。

  1. 在不停掉老进程的情况下,启动新进程。

  2. 老进程负责处理仍然没有处理完的请求,但不再接受处理请求。

  3. 新进程接受新请求。

  4. 老进程处理完所有请求,关闭所有连接后,停止。

实现步骤:
1、获取nginx的安装目录

[root@turn]# ps -ef | grep nginx | grep master | awk -F" " '{print $11}'
/usr/local/nginx/sbin/nginx

2、查看升级之前的nginx版本,同时获取旧nginx版本的编译参数

[root@turn sjd]# /usr/local/nginx/sbin/nginx -V #注意是大写的V
nginx version: nginx/1.11.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) 
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx/ --with-http_v2_module --with-http_ssl_module --with-http_sub_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-http_realip_module

3、到官网下载1.16.0版本的nginx (下载地址:http://nginx.org/)

[root@turn sjd]#  wget http://nginx.org/download/nginx-1.16.0.tar.gz

4、解压下载好的文件,并进入文件夹进行编译(只编译不安装)

[root@turn sjd]# tar xf nginx-1.16.0.tar.gz 
[root@turn sjd]# cd nginx-1.16.0
[root@turn nginx-1.16.0]# ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/ --with-http_v2_module --with-http_ssl_module --with-http_sub_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-http_realip_module
[root@turn nginx-1.16.0]# make

5、备份旧版本的nginx的执行程序

[root@turn nginx-1.16.0]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx12.old

6、替换旧的Nginx的执行程序

[root@turn nginx-1.16.0]# cp objs/nginx /usr/local/nginx/sbin/
[root@turn nginx-1.16.0]# cd /usr/local/nginx/sbin/
[root@turn sbin]# ls
nginx  nginx12.old  nginx.old

7、发送USR2信号给旧版本主进程号,使nginx的旧版本停止接收请求,用nginx新版本接替,且老进程处理完所有请求,关闭所有连接后,停止

[root@turn sbin]# cd ..
[root@turn nginx]# cd logs/
[root@turn logs]# ls
access.log  error.log  nginx.pid  shunjie.access.log  
[root@turn logs]# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

8、查看nginx pid目录,多了个nginx.pid.oldbin文件,存放了旧版本nginx的pid号

[root@turn logs]# ls
access.log  error.log  nginx.pid  nginx.pid.oldbin

#查看服务运行状态

[root@turn logs]# netstat -aupt | grep nginx
tcp        0      0 *:http                      *:*                         LISTEN      793/nginx

9、从容关闭旧进程

[root@turn logs]# kill -QUIT `cat nginx.pid.oldbin`
[root@turn logs]# ls
access.log  error.log  nginx.pid  shunjie.access.log

10、查看升级后的版本

[root@turn logs]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.16.0

平滑升级完毕!

附:如果是yum安装的nginx,升级就很简单了,直接yum update nginx即可安装到仓库有的最新版,不过通常库更新的比较慢。

rpm包安装的话,就直接rpm -Uvh nginx-1.16.0.rpm即可


PS:

如果出现[emerg]: getpwnam(“nginx”) failed错误是没有安装nginx用户导致的无法启动

[root@localhost nginx-1.16.0]# useradd -s /sbin/nologin -M nginx
[root@localhost nginx-1.16.0]# id nginx
[root@localhost nginx-1.16.0]# /usr/local/nginx/sbin/nginx
[root@localhost nginx-1.16.0]# netstat -tlunp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9709/nginx: master
文章关键词: Nginx升级
分享到: / / /
  • 点击此处扫一扫二维码,直接手机访问此页