Nginx 平滑升级

热部署

(方法一)

  1. 查看原编译参数
# 升级一般是添加新的模块,或者升级版本,所以要参考以前编译的模块,如果不添加,那么以前的模块就不能使用了
[ ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
configure arguments: --prefix=/usr/local/nginx
  1. 预编译/编译/安装
./configure --prefix=/usr/local/nginx  --with-http_stub_status_module
make && make install

3.直接升级

make upgrade

(方法二)

  1. 编译安装nginx-1.16.1
yum -y install gcc gcc-c++ pcre-devel zlib-devel    #安装依赖包
useradd -M -s /sbin/nologin nginx    #添加程序运行用户
tar -zxvf nginx-1.16.1.tar.gz -C /usr/src/    #解包
cd /usr/src/nginx-1.16.1/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make 
make install    #配置编译并且安装
/usr/local/nginx/sbin/nginx        #启动nginx服务
  1. 查看升级之前的nginx版本,同时获取旧nginx版本的编译参数
#/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx
  1. 编译nginx-1.18.0(只编译不安装)
tar -zxvf nginx-1.18.0.tar.gz -C /usr/src/    #解包
cd /usr/src/nginx-1.18.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 
make    #配置编译并且安装
  1. 备份旧版本的nginx的执行程序
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
  1. 替换旧的Nginx的执行程序
cp /usr/src/nginx-1.18.0/objs/nginx /usr/local/nginx/sbin/
  1. 使nginx的旧版本停止接收请求,有Nginx新版本接替,且老进程处理完所有请求,关闭所有连接后,停止
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
  1. 查看nginx日志目录会生成一个nginx.pid.oldbin文件,存放旧版本nginx 的pid号
#ls /usr/local/nginx/logs/
access.log  error.log  nginx.pid  nginx.pid.oldbin

8.查看升级升级后的版本

#/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.18.0
  1. 从容关闭旧进程
kill -QUIT `cat nginx.pid.oldbin`
  1. 查看服务运行状态
netstat -aupt | grep nginx
getnameinfo failed
tcp        0      0 *:http                      *:*                         LISTEN      6963/nginx
  1. 使用客户端验证Nginx服务是否可以继续访问

相关推荐