如何平滑升级 Nginx

2023-09-22 11:01:26

Nginx详情:

Nginx 是一个流行的 Web 服务器和反向代理服务器。当需要升级 Nginx 时,可能会涉及到停止和启动服务,这将导致一段时间内网站不可用。为了避免这种情况,可以采用平滑升级的方法。

以下是平滑升级 Nginx 的步骤:

1.查看现有 Nginx 编译参数

在终端输入以下命令查看当前 Nginx 的编译参数:

/usr/local/nginx/sbin/nginx -V

这将输出 Nginx 的版本和编译参数,例如:

nginx version: nginx/1.20.0

built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)

configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

2.安装新版本的nginx

下载新版本的 Nginx 并解压缩,进入解压缩后的目录,然后运行以下命令进行安装:

tar -zxvf nginx-1.20.1.tar.gz

cd nginx-1.20.1/

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module make

这将编译新版本的 Nginx,但是不会安装它。

3.备份原有 Nginx 二进制文件

在终端输入以下命令备份原有的 Nginx 二进制文件:

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_$(date +%F)

此时 Nginx 服务不会停止运行。

4.复制新的 Nginx 二进制文件

进入新的 Nginx 源码目录,然后复制新的 Nginx 二进制文件到 /usr/local/nginx/sbin/ 目录下:

cp /usr/local/nginx-1.20.1/objs/nginx /usr/local/nginx/sbin/

5.测试新版本的 Nginx 是否正常

在终端输入以下命令测试新版本的 Nginx 是否正常:

/usr/local/nginx/sbin/nginx -t

如果测试成功,会输出以下内容:

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

6.给 Nginx 发送平滑迁移信息

在终端输入以下命令给 Nginx 发送平滑迁移信息:

kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

这将启动新的 Nginx 进程并加载新的二进制文件,但不会关闭旧的 Nginx 进程。

7.查看 Nginx 进程 ID

在终端输入以下命令查看 Nginx 的进程 ID:

ls /usr/local/nginx/logs/

这将输出 Nginx 的进程 ID 和一个后缀为 .oldbin 的文件,例如:

nginx.pid.oldbin

8.关闭旧的nginx进程

执行如下命令:

kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin`

9.此时不重载配置启动旧的工作进程

执行如下命令:

kill -HUP `cat /usr/local/nginx/logs/nginx.pid.oldbin`

10.结束工作进程,完成此次升级

执行如下命令:

kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

11.查看nginx是否升级成功

执行如下命令:

nginx -V

nginx version: nginx/1.20.1

built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)

configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

更多推荐

基于Java的Base64编解码优化探讨

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

js 事件流、事件冒泡、事件捕获、阻止事件的传播

事件流js事件的执行过程分为捕获阶段(由外层节点传播到内层节点)和冒泡阶段(由内层节点传播到外层节点),即先执行捕获阶段的代码,后执行冒泡阶段的代码事件冒泡js事件中的代码默认在冒泡阶段执行,以下图为例,点击box2时,会依次触发box2的点击事件【冒泡阶段执行】、box1的点击事件【冒泡阶段执行】、window的点击

ubuntu中如何用docker下载华为opengauss数据库(超简单)

ubuntu中如何下载华为opengauss数据库前言一、安装docker1.方法一:2.方法二二、拉取openguass镜像三、创建容器四、连接数据库,切换到omm用户,用gsql连接到数据库五.最后用DateGrip远程连接测试(1)选择数据源(2)查看虚拟机ip地址(3)远程连接测试前言openGauss是一款全

家居行业如何借助AI营销数智化转型?《2023 家居行业AI营销第一课(重庆站)》给你答案

商务部将2023年定为“消费提振年”。作为仅次于汽车消费的家庭第二大消费支出,家居产业的高质量发展与扩大内需提振消费息息相关。随着今年利好政策不断发布,家居建材行业的市场环境及消费潜力得到大幅度改善。随着ChatGPT等新技术的出现与消费需求升级的趋势,近年来,家居建材行业数智化转型趋势越来越明显,家居行业的品牌营销也

基于SSM+Vue的网络教学平台的设计与实现的设计与实现

末尾获取源码开发语言:JavaJava开发工具:JDK1.8后端框架:SSM前端:采用Vue技术开发数据库:MySQL5.7和Navicat管理工具结合服务器:Tomcat8.5开发软件:IDEA/Eclipse是否Maven项目:是目录一、项目简介二、系统功能三、系统项目截图学生功能模块的实现管理员功能模块的实现教师

华纳云:Ubuntu下开启php调试模式报错如何解决

开启PHP调试模式时出现错误通常是由于PHP代码中的问题引起的。调试模式有助于发现和修复这些问题。以下是解决开启PHP调试模式时可能遇到的一些常见问题以及解决方法:错误报告级别设置不正确:PHP有不同的错误报告级别,开启调试模式时,建议将错误报告级别设置为最高,以捕获所有错误。您可以在PHP配置文件(php.ini)中

半导体行业如何在跨网数据交换时保证核心数据是安全的?

半导体行业是高科技产业的核心,也是国家战略的重点领域。半导体产业涉及到芯片设计、制造、封装、测试等多个环节,每个环节都需要大量的数据支撑和交换。半导体企业的核心数据不仅包括技术方案、设计图纸、生产参数等,还包括市场分析、客户信息、合作协议等。这些数据对于半导体企业的竞争力和发展至关重要,一旦泄露或损坏,将会给企业带来巨

【C++】bitset介绍与用法讲解

今日写csp,看大佬的题解中出现了bitset,以前有印象但没学,所以赶快去OI-wiki上补一下,并记录于此std::bitset是标准库中的一个存储0/1的大小不可变容器。严格来讲,它并不属于STL。TheC++standardlibraryprovidessomespecialcontainerclasses,t

Python绘制X-bar图和R图 | 统计过程控制SPC

X-bar图和R图是用于统计过程控制(SPC)的两种常用工具,用于监测过程的平均值和范围(变异性)。这些图有助于识别过程中的变化和异常,以便及时采取纠正措施。**X-bar图(平均值控制图)**显示了一系列样本的平均值,用于监测过程的平均值是否保持在可接受的范围内。X-bar图通常由以下几个要素组成:样本平均值:每个样

线程池的基本理解以及使用

首先线程池是一种管理和复用线程的机制,它可以用来提高多线程编程的效率和性能。线程池的概念:线程池是一种线程管理的机制,它通常由一个线程池管理器(ThreadPoolExecutor)和一组线程组成。线程池管理器负责创建、管理和调度线程。当任务到达时,线程池会从线程池中预先创建的线程中选一个来执行任务,如果没有空闲线程,

微调大型语言模型(一):为什么要微调(Why finetune)?

今天我们来学习Deeplearning.ai的在线课程微调大型语言模型(一)的第一课:为什么要微调(Whyfinetune)。我们知道像GPT-3.5这样的大型语言模型(LLM)它所学到的知识截止到2021年9月,那么如果我们向ChatGPT询问2022年以后发生的事情,它可能会产生“幻觉”从而给出错误的答案,再比如我

热文推荐