工作需要将nginx版本升级,原先为1.18,现在要升级为1.20。
附操作步骤及执行脚本(全程root账号执行)。
[root@localhost /]#yum install -y gcc
[root@localhost /]#yum install -y pcre pcre-devel
[root@localhost /]#yum install -y zlib-devel
[root@localhost /]#yum install -y openssl
[root@localhost /]#
[root@localhost /]#touch test1.sh
[root@localhost /]#vi test1.sh
[root@localhost /]#sh test1.sh
######杀掉之前的进程
killall nginx
######将原来的nginx做备份
mv /app/nginx /app/nginx.bak
######将nginx执行文件也做备份
mv /app/nginx.bak/nginx/sbin/nginx /app/nginx.bak/nginx/sbin/nginx.bak
######因为文件做备份后名字变更,我们重新建立nginx目录
mkdir -p /app/nginx
######将升级包上传到某一路径,然后解压文件
cd /update
tar -zxvf nginx-1.20.2.tar.gz
######进入解压后的路径,将nginx配置到指定路径,并编译执行
cd nginx-1.20.2
./configure --prefix=/app/nginx/nginx
make&&make install
######给编写及拥有权限
chmod -R 777 /app/nginx
chown -R root:root /app/nginx
######因为是平滑升级,我只要sbin下的nginx执行文件,所以执行如下步骤,复杂了些。其实到这步可以直接进入到sbin路径下执行nginx程序就可以的。
######将目前新的nginx包更名为nginx.new,同时将原来备份的nginx恢复。
mv /app/nginx /app/nginx.new
mv /app/nginx.bak /app/nginx
######将新的nginx路径下的nginx执行文件直接复制到原来的nginx路径下,执行。
cp /app/nginx.new/nginx/sbin/nginx /app/nginx/nginx/sbin
cd /app/nginx/nginx/sbin
./nginx
######nginx已重新启动!!!
echo "nginx 'date +%Y%m%d'升级成功"
exit 0
来个注意事项汇总:
1、因为nginx需要相关组件支持,需要先查看是否已安装,本来查看确认都有的,但在配置路径时一直在报错,但重新按照zlib-devel包安装就通过了。同理pcre等。
(pcre-devel,zlib-devel,openssl-devel包)
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.
[root@localhost /]#rpm -qa |grep zlib
zlib-1.2.7-20.el7_9.x86_64[root@localhost /]#yum install -y zlib-devel
[root@localhost /]#rpm -qa |grep zlib
zlib-1.2.7-20.el7_9.x86_64zlib-devel-1.2.7-20.el7_9.x86_64
2、用普通用户启动nginx。
可以在脚本中增加su - lin,不过有个问题我暂时也没有想到解决方案,版本升级后,需要手工退出普通用户后,方可重新启动nginx查到进程。
[lin@localhost ~]$ exit
登出
nginx 'date +%Y%m%d'升级成功
######杀掉之前的进程
killall nginx
######将原来的nginx做备份
mv /app/nginx /app/nginx.bak
######将nginx执行文件也做备份
mv /app/nginx.bak/nginx/sbin/nginx /app/nginx.bak/nginx/sbin/nginx.bak
######因为文件做备份后名字变更,我们重新建立nginx目录
mkdir -p /app/nginx
######将升级包上传到某一路径,然后解压文件
cd /update
tar -zxvf nginx-1.20.2.tar.gz
######进入解压后的路径,将nginx配置到指定路径,并编译执行
cd nginx-1.20.2
./configure --prefix=/app/nginx/nginx
make&&make install
######给编写及拥有权限
chmod -R 777 /app/nginx
chown -R root:root /app/nginx
######因为是平滑升级,我只要sbin下的nginx执行文件,所以执行如下步骤,复杂了些。其实到这步可以直接进入到sbin路径下执行nginx程序就可以的。
######将目前新的nginx包更名为nginx.new,同时将原来备份的nginx恢复。
mv /app/nginx /app/nginx.new
mv /app/nginx.bak /app/nginx
######将新的nginx路径下的nginx执行文件直接复制到原来的nginx路径下,执行。
cp /app/nginx.new/nginx/sbin/nginx /app/nginx/nginx/sbin
chown -R lin:lin /app/nginx
chmod 777 /app/nginx
su - lin
cd /app/nginx/nginx/sbin
./nginx
######nginx已重新启动!!!
echo "nginx 'date +%Y%m%d'升级成功"
exit 0