nginx平滑升级完整版

nginx平滑升级完整版

前言:因公司漏洞扫描发现高危漏洞,要求修复漏洞


nginx resolver 释放后重利用漏洞(CVE-2016-0746)修复,拿到这个漏洞的时候整个人都是懵的,wc,我才两年多Java开发工作经验需要我升级服务器漏洞?心里一万头cnm在奔腾…好吧,即使再不情愿也需要修复…只能在网上找了一大堆博客做出总结。



提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是nginx resolver 释放后重利用漏洞(CVE-2016-0746)?

nginx是一款使用非常广泛的高性能web服务器。 ==nginx 1.8.1之前版本、1.9.10之前的1.9.x版本中==,resolver存在释放后重利用漏洞。 远程攻击者通过CNAME响应处理相关的构造的DNS响应,可造成worker进程崩溃, 拒绝服务。虽然介绍就这样么写的,还给我提供了厂商补丁包: 厂商补丁: Nginx

Nginx已经为此发布了一个安全公告(049700)以及相应补丁:
049700:nginx security advisory (CVE-2016-0742, CVE-2016-0746,
CVE-2016-0747)
链接:http://mailman.nginx.org/pipermail/nginx/2016-January/049700.html
补丁链接:https://trac.nginx.org/nginx/changeset/93d70d87914c350948ab70
1cc99569680320e198/nginx
,通过链接打开一开,我又懵了,这都是啥,我的天,于是我就看详情描述,被我捕捉到关键字nginx 1.8.1之前版本、1.9.10之前的1.9.x版本中,意思就是说nginx1.8.1和1.9.19是不存在漏洞,接下来相信大家都知道怎么做了,就是升级呗,来上干货。

二、升级nginx-1.8.1

1.准备工作
提前准备好安装包nginx-1.8.1.tar.gz
下载地址:http://nginx.org/en/download.html
点击nginx-1.8.1下载首先cd /tmp
在tmp新建一个文件夹
mkdir nginx
通过XShell等连接工具上传至nginx文件夹并解压
tar -zxvf nginx-1.8.1.tar.gz

在这里插入图片描述
接下来先查看当前nginx版本
/usr/local/nginx/sbin/nginx -V

我这边是刚升级完,所有版本是1.8.1

在这里插入图片描述
在编译安装之前查看nginx进程ID信息:
ps -ef |grep nginx

在这里插入图片描述
1.编译安装:这里需要注意如果你是root账号升级安装的话是不需要指定用户和组的
例如:./configure --with-http_realip_module就可以了,这里./configure后面输入的就是你之前nginx版本信息中的configure arguments

如果你需要指定用户编译安装例如www用户
支持ssl 支持pcre 支持状态查询 支持静态压缩模块等执行如下命令
./configure --user=www --group=www --prefix=/usr/local/nginx/ --with-pcre --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module

这里需要说明,具体需要支持什么功能还是要查看之前nginx配置的信息

2.查看是否编译成功
echo $? ,返回0则代表成功

3.echo $?成功后直接执行make

4.再次查看是否执行成功
echo $?

5.平滑升级,把编译安装好的nginx启动文件替换旧的文件

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

再把新的文件copy过去
cp /tmp/nginx/nginx-1.8.1/objs/nginx /usr/local/nginx/sbin/nginx

6.kill掉之前老版本nginx进程
kill -USR2 cat /usr/local/nginx/nginx.pid
kill -QUIT cat /usr/local/nginx/nginx.pid.oldbin

7.没报错就代表成功查看nginx的版本
/usr/local/nginx/sbin/nginx -V

在这里插入图片描述

至此nginx就已经升级完毕,第一次写博客,各位大佬多多包涵,
如有什么问题可在评论中提出。

<think>好的,用户想了解如何进行Nginx平滑升级以及注意事项。我需要先整理一下之前提供的引用内容,看看有哪些关键步骤和注意点。 首先,根据引用[1],平滑升级的方法主要是向原Nginx主进程发送HUP信号,这样可以重新启动工作进程,同时继续使用旧版本的配置文件。但这里可能有点混淆,因为引用[4]提到的是USR2信号来启动新版本,然后使用WINCH信号逐步停止旧进程。需要确认正确的信号使用方式。 再看引用[2],里面提到两种方案,用户关注的是第二种,即平滑升级。步骤包括编译新版本、替换二进制文件、发送信号。引用[3]给出了具体的命令示例,比如解压、配置、编译安装,这可能涉及覆盖旧版本的可执行文件吗?或者是否需要将新版本的安装路径分开? 引用[4]详细描述了信号的使用流程:USR2启动新服务,WINCH停止旧的工作进程,之后可能需要发送QUIT信号来完全关闭旧的主进程。这里需要注意的是,新旧版本会同时运行一段时间,确保新版本没问题后再关闭旧的。 接下来需要综合这些信息,整理出步骤清晰的流程。首先,用户需要下载新版本的Nginx源码,进行编译,注意配置参数要与旧版本一致,这点在注意事项里很重要,否则可能出现兼容问题。然后,替换二进制文件,通常是将新编译的nginx文件复制到旧版本的安装目录下。接着,发送USR2信号给旧的主进程,启动新进程。此时,系统会有两个主进程,旧的和新的。确认新版本运行正常后,发送WINCH信号给旧的主进程,让其优雅停止工作进程。如果出现问题,可以回滚,即重新使用旧进程并reload。 注意事项方面,必须确保编译时的参数一致,包括模块,否则新版本可能缺少必要的功能。同时,每一步都要检查nginx的状态,使用nginx -v或nginx -V查看版本和参数。此外,备份旧版本二进制文件也是关键,以便快速回滚。还有,升级过程中要监控服务状态,确保没有请求丢失。 用户可能的疑问点包括信号的具体作用,如何验证配置参数是否一致,以及回滚的具体步骤。需要把这些细节清晰地呈现出来,避免用户操作时出错。同时,要强调测试的重要性,建议在测试环境先演练一遍,再在生产环境操作。 最后,生成的相关问题应该围绕升级后的验证、常见错误处理、参数对比方法等,帮助用户全面了解平滑升级的各个方面。</think>### Nginx平滑升级方法与注意事项 #### **一、平滑升级方法** 1. **准备新版本源码包** 下载新版本Nginx源码并解压: ```bash wget http://nginx.org/download/nginx-x.x.x.tar.gz tar zxvf nginx-x.x.x.tar.gz ``` 2. **编译新版本** 进入源码目录,**确保编译参数与原版本一致**(可通过 `nginx -V` 查看旧版本参数)[^3]: ```bash cd nginx-x.x.x ./configure --prefix=/usr/local/nginx --user=www --with-http_ssl_module # 其他参数需与旧版本一致 make # 仅编译,不执行make install ``` 3. **替换二进制文件** 备份旧版本二进制文件,替换为新编译的 `objs/nginx`: ```bash cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old cp objs/nginx /usr/local/nginx/sbin/nginx ``` 4. **发送信号触发升级** - 向旧主进程发送 `USR2` 信号,启动新版本主进程[^4]: ```bash kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid) ``` - 向旧主进程发送 `WINCH` 信号,逐步关闭旧工作进程: ```bash kill -WINCH $(cat /usr/local/nginx/logs/nginx.pid.oldbin) ``` 5. **验证与回滚** - 确认新版本运行正常后,关闭旧主进程: ```bash kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid.oldbin) ``` - 若需回滚,向旧主进程发送 `HUP` 信号重启旧进程,并强制终止新进程[^1]。 --- #### **二、注意事项** 1. **编译参数一致性** 必须通过 `nginx -V` 检查旧版本配置参数,确保新版本编译时包含所有原有模块(如缺少 `--with-http_ssl_module` 会导致HTTPS失效)[^3]。 2. **备份与版本验证** - 操作前备份配置文件和二进制文件。 - 升级后执行 `nginx -v` 和 `nginx -t` 验证版本及配置语法[^1]。 3. **信号操作顺序** 必须按 `USR2` → `WINCH` → `QUIT` 顺序发送信号,避免服务中断[^4]。 4. **并行运行风险** 新旧版本会短暂并行运行,需监控资源占用情况(如内存、CPU)。 5. **回滚预案** 保留旧版本二进制文件,若新版本异常,可通过旧文件快速回滚[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值