升级nginx
问题
Nessus上周报nginx由于http2的漏洞,可能导致ddos的攻击,并且将安全级别设定为high。
用yum update做了个升级,但是没仔细看,这样升级后的版本还是受到影响的。
没法只好从根上进行解决,就是按照Nessus的报告说明,升级到最新版的nginx。
过程
-
到nginx.org下载最新的tar.gz文件
-
解压备用,这里假设解压到/root/nginx1.17.x/这个目录
-
确定当前运行的nginx的信息
nginx -v //用于确定当前的nginx版本
nginx -V //用于确定当前nginx使用的配置项,拷贝输出
-
进入/root/nginx1.17.x目录
-
运行./configure 加上当前nginx的配置项(就是b的输出),如果出现报错,酌情进行一些项目的修改
-
我这里因为以前是yum安装的,有些依赖没有及时更新,在进行./configure的时候出现多个依赖的问题,这边用这个来解决的
yum install openssl-devel zlib zlib-devel libxslt-devel gd gd-devel geoip-devel gperftools perl-devel perl-ExtUtils-Embed -y
-
上面的依赖安装完毕后,再进行./configure 加配置参数的事情就顺利完成了。
-
再下来对当前的nginx的运行文件进行备份,这个过程不影响当前运行的nginx进程
mv /usr/sbin/nginx /usr/sbin/nginx.bak
-
还是在/root/nginx1.17.x目录下,运行make命令,进行编译
-
编译顺利完成后会进行提示,并且在objs目录下会有nginx的文件出现
-
复制该文件到原位置
cp ./objs/nginx /usr/sbin/nginx
-
复制完成后,nginx -t来检测下nginx.conf的配置文件是否没有错误
-
如果提示有错误,出现模块的版本替换问题,最好就是直接到module文件夹下,对这些个module的配置文件用#号进行注释掉
-
还有就是原来我的那些conf.d目录下的conf文件都是开了ssl的,但是这个新版本里面的ssl on这个指令已经被废除了,所以在conf文件里面也要将这行ssl on注释掉
-
再进行nginx -t的测试,没有错误了
-
依然在 /root/nginx1.17.x目录下运行 make upgrade进行热升级
-
以后使用service nginx restart 或者service nginx reload 都成
-
访问下页面,看看没有问题,nginx -v也显示为高版本了。
结论
nginx是非常成熟稳定的应用程序了。在linux的世界中,所有基于文本配置的程序都是很稳定,很有年头的事物,这种稳定,帮助后来者节约大量的时间来部署和修复错误。类似BIND的这种,超级易用,超级稳定,这也是我们都喜欢linux的原因。让有想法的人做更多有效果/结果的事情,而不是大量修复性的事务。