文章目录
- 一 环境准备
- 二 安装nginx
- 三 升级nginx
- 四 注意事项
一 环境准备
公司等保要求修复nginx的应用漏洞,从1.12.2升级到1.20.2版本。
本机操作系统是CentOS7.9,主机IP是192.168.0.201,nginx是在服务器部署而非容器部署。
下列安装和升级操作请先在个人虚拟机或公司非生产环境操作验证,不要直接在生产环境进行升级;在实际操作前,做好快照和配置文件备份,方便回滚。
二 安装nginx
1.下载和解压安装包
cd /usr/local/
wget https://nginx.org/download/nginx-1.12.2.tar.gz
tar xf nginx-1.12.2.tar.gz
2.新建nginx用户
useradd nginx -M -s /sbin/nologin
3.执行编译命令
cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=nginx --group=nginx --with-http_stub_status_module --with-http_sub_module --with-http_ssl_module --with-http_gzip_static_module --with-stream --with-stream_ssl_module --with-http_flv_module --with-http_mp4_module --with-http_realip_module --with-pcre
4.编译安装
make && make install
5.创建可执行文件的软链接
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
6.修改nginx目录所有者
chown -R nginx:nginx /usr/local/nginx
7.设置开机自启动
chmod +x /usr/local/nginx/sbin/nginx
echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
8.检查服务启动
netstat -lntup|grep 80
curl 192.168.0.201:80 -I
三 升级nginx
1.停止nginx服务
#找到nginx的master主进程
ps -ef|grep nginx
#杀死master主进程id
kill nginx主进程ID
2.备份nginx目录文件
#将1.12.2版本的nginx安装目录名称修改,便于失败回滚
mv /usr/local/nginx /usr/local/nginx-1.12.2
3.下载安装包
cd /usr/local
wget https://nginx.org/download/nginx-1.20.2.tar.gz
tar xf nginx-1.20.2.tar.gz
4.编译安装
cd /usr/local/nginx-1.20.2
./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=nginx --group=nginx --with-http_stub_status_module --with-http_sub_module --with-http_ssl_module --with-http_gzip_static_module --with-stream --with-stream_ssl_module --with-http_flv_module --with-http_mp4_module --with-http_realip_module --with-pcre
配置后进行编译安装
make && make install
5.配置文件覆盖
#实际生产环境需要覆盖更换的配置文件可能还有别的,以下2个是笔者环境需要替换的文件,请以实际需要为准
cp /usr/local/nginx-1.12.2/html/index.html /usr/local/nginx/html/
cp /usr/local/nginx-1.12.2/conf/nginx.conf /usr/local/nginx/conf
6.修改新nginx目录所有者信息
chown -R nginx:nginx /usr/local/nginx
7.启动并检查服务
/usr/local/nginx/sbin/nginx
curl 192.168.0.201:80
可以正常访问站点页面内容,升级验证初步成功,接下来需要项目组研发人员进行更细致的验证工作。
四 注意事项
1.升级nginx前直接kill掉主进程停服务。
笔者所在生产环境允许业务低峰期间的停服行为,因此可以简单粗暴的直接杀死nginx主进程来停止服务,因此该操作请谨慎评估后进行。(当然实际上这样也是最简单的)
2.升级时configure的参数选择。
笔者实际生产环境的nginx安装还添加了其他模块的内容,使用了 --add-module
参数,因此在执行 ./configure
命令时,请提前查看编译安装时使用了哪些模块和依赖,升级操作和安装操作时的参数保持一致,安装目录等是否符合公司规范,不要生搬硬套。
3.编译报错。
在执行./configure命令后,执行make 命令时的报错。
make: *** No rule to make target `build', needed by `default'. Stop.
笔者的报错实际上是openssl依赖没有安装,如果不确定自己缺少哪些依赖,可以直接都安装。
yum -y install gcc openssl openssl-devel pcre-devel zlib zlib-devel
4.服务启动失败报错。
解决编译安装的报错后,服务无法启动,下列报错信息。
nginx: [emerg] getpwnam("nginx") failed
该报错表示获取用户失败,直接创建nginx用户即可。
useradd nginx