Nginx 平滑升级
热部署
(方法一)
- 查看原编译参数
# 升级一般是添加新的模块,或者升级版本,所以要参考以前编译的模块,如果不添加,那么以前的模块就不能使用了
[root@node3 ~]# /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
- 预编译/编译/安装
./configure --prefix=/usr/local/nginx --with-http_stub_status_module
make && make install
3.直接升级
make upgrade
(方法二)
- 编译安装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服务
- 查看升级之前的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
- 编译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 #配置编译并且安装
- 备份旧版本的nginx的执行程序
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
- 替换旧的Nginx的执行程序
cp /usr/src/nginx-1.18.0/objs/nginx /usr/local/nginx/sbin/
- 使nginx的旧版本停止接收请求,有Nginx新版本接替,且老进程处理完所有请求,关闭所有连接后,停止
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
- 查看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
- 从容关闭旧进程
kill -QUIT `cat nginx.pid.oldbin`
- 查看服务运行状态
netstat -aupt | grep nginx
getnameinfo failed
tcp 0 0 *:http *:* LISTEN 6963/nginx
- 使用客户端验证Nginx服务是否可以继续访问