工作需要将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_64

zlib-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