nginx news
2018-11-06 nginx-1.14.1 stable and nginx-1.15.6 mainline versions have been released, with fixes for vulnerabilities in HTTP/2 (CVE-2018-16843, CVE-2018-16844) and the MP4 module (CVE-2018-16845).
nginx官网消息,修复了两个漏洞,HTTP/2 (CVE-2018-16843, CVE-2018-16844)该漏洞允许潜在的攻击者触发拒绝服务(DoS)状态并可能访问敏感的信息。在nginx HTTP/2实现中发现了两个安全问题,这可能导致过多的内存消耗(CVE-2018-16843)和CPU使用率(CVE-2018-16844)。此外,“如果在配置文件中使用”listen“指令的”http2“选项,则问题会影响使用ngx_http_v2_module编译的nginx(默认情况下不编译)。”为了利用上述两个问题,攻击者可以发送特制的HTTP/2请求,这将导致过多的CPU使用和内存使用,最终触发DoS状态。
第三个安全问题(CVE-2018-16845)影响MP4模块,允许攻击者在恶意制作的MP4文件的帮助下,在工作进程中导致无限循环,崩溃或内存泄露状态。最后一个安全问题仅影响运行使用ngx_http_mp4_module构建的nginx版本并在配置文件中启用mp4选项的服务器。此外,如果攻击者还设法触发恶意MP4文件的处理,则该问题仅会影响服务器。
为缓解这两个问题,服务器管理员务必将其nginx安装更新为1.14.1 稳定版或1.15.6主线版本。
所以今天来做下nginx的升级
1、获取nginx的安装目录
# ps -ef | grep nginx | grep master | awk -F" " '{print $11}'
usr/local/nginx/sbin/nginx
2、查看升级之前的nginx版本,同时获取旧nginx版本的编译参数
#/usr/local/nginx/sbin/nginx -V #注意是大写的V
nginx version: nginx/1.12.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
3、到官网下载1.14.1版本的nginx (下载地址:http://nginx.org/en/download.html)
# wget http://nginx.org/download/nginx-1.14.1.tar.gz
4、解压下载好的文件,并进入文件夹进行编译(只编译不安装)
# tar xf nginx-1.14.1.tar.gz
# cd nginx-1.14.1
# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
#make
5、备份旧版本的nginx的执行程序
# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
6、替换旧的Nginx的执行程序
# cp objs/nginx /usr/local/nginx/sbin/
7、发送USR2信号给旧版本主进程号,使nginx的旧版本停止接收请求,用nginx新版本接替,且老进程处理完所有请求,关闭所有连接后,停止
# kill -USR2 `cat /var/run/nginx/nginx.pid`
8、查看nginx pid目录,多了个nginx.pid.oldbin文件,存放了旧版本nginx的pid号
# ls /var/run/nginx
nginx.pid nginx.pid.oldbin
9、从容关闭旧进程
# kill -QUIT `cat /var/run/nginx/nginx.pid.oldbin`
10、查看升级后的版本
# /usr/local/nginx/sbin/nginx -v #可以用小写v
nginx version: nginx/1.14.1
平滑升级完毕!
附:如果是yum安装的nginx,升级就很简单了,直接yum update nginx即可安装到仓库有的最新版,不过通常库更新的比较慢。
rpm包安装的话,就直接rpm -Uvh nginx-1.14.1.rpm即可