Nginx升级的两种方式

 更新时间:2026年08月29日 15:17:47   作者:柒柒qr  
本文详细讲解传统升级和平滑升级两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

在服务器运维工作中,Nginx 作为高性能的 Web 服务器和反向 代理,其版本更新不仅能修复已知漏洞、提升稳定性,还可能带来新的功能特性。本文介绍了Nginx的两种升级方式,分别是普通升级与平滑升级。

一、升级前的准备(两种都需要做)

1.1 确认当前 Nginx 信息

# 查看当前 Nginx 版本
nginx -V  # 完整信息(含编译参数),重点记录 --prefix、--with-xxx 等参数

1.2 查看 Nginx 运行状态

# 查看 Nginx 运行状态
systemctl status nginx  # 系统服务管理(CentOS/RHEL 7+、Ubuntu 16.04+)

1.3 下载目标版本 Nginx

# 进入源码存放目录(如 /opt)
cd /opt/src
# 下载源码包
wget https://nginx.org/download/nginx-1.22.0.tar.gz
# 解压到指定目录/opt下
tar -zxvf nginx-1.22.0.tar.gz -C /opt
cd nginx-1.22.0

1.4 备份关键文件

升级前必须备份 配置文件旧版本二进制文件,防止升级失败后无法回滚

# 备份 Nginx 配置文件(默认路径为 --prefix 指定的 conf 目录)
cp -r /usr/local/nginx/conf /usr/local/nginx/conf.back
# 备份 Nginx 日志文件(可选,避免日志丢失)
cp -r /usr/local/nginx/logs /usr/local/nginx/logs_back
# 备份旧版本二进制文件(后续会用到)
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old

二、传统升级(停止服务升级/冷升级)

2.1 停止当前 Nginx 服务

# 通过系统服务停止
systemctl stop nginx
# 查看状态
systemctl status nginx

2.2 编译新版本 Nginx

# 进入解压后的新版本目录
cd /opt/nginx-1.22.0
   
# 执行 configure 配置(参数与旧版本保持一致)
./configure \
--prefix=/usr/local/nginx \  # 安装路径(与旧版本相同)
--user=nginx \               # 运行用户
--group=nginx \              # 运行用户组
--with-http_stub_status_module \  # 状态监控模块
--with-http_ssl_module        # HTTPS 模块(若旧版本有则保留)
# 编译(无需执行 make install,避免覆盖配置文件)
make

2.3 替换二进制文件并启动

# 复制新版本二进制文件到运行目录
cp objs/nginx /usr/local/nginx/sbin/
# 启动新版本 Nginx
systemctl start nginx

2.4 查看升级后的版本

# 查看版本(应显示目标版本 1.22.0)
nginx -v

三、平滑升级(热升级/在线升级)

平滑升级是 Nginx 的核心特性之一,其原理是不停止旧版本主进程,通过信号控制逐步替换工作进程。

3.1 核心原理:Nginx 信号机制

Nginx 主进程(master)通过接收特定信号实现进程管理,平滑升级依赖以下 3 个关键信号:

  • USR2:主进程接收到后,会启动一个新版本的主进程,并继承旧版本的监听端口和配置;
  • WINCH:旧版本主进程接收到后,会逐步关闭所有旧版本工作进程(worker);
  • QUIT:优雅关闭主进程(等待所有工作进程结束后退出)

3.2 操作步骤

完成版本确认、源码下载、文件备份和新版本编译(步骤与传统升级的 1~2 一致,确保 make 编译完成)。

3.2.1 复制新版本二进制文件

# 复制新版本二进制文件(同方案)
cp /opt/nginx-1.22.0/objs/nginx /usr/local/nginx/sbin/nginx

3.2.2 发送信号启动新版本主进程

先找到旧版本 Nginx 主进程的 PID

# 查找旧版本主进程 PID(示例 PID 为 4787)
ps -aux | grep nginx

# 发送 USR2 信号,启动新版本主进程
kill -USR2 62379
# 再次查看进程,会发现两个主进程
ps -aux | grep nginx

3.2.3 逐步关闭旧版本工作进程

# 发送 WINCH 信号给旧版本主进程,关闭旧工作进程
kill -WINCH 62379
# 查看进程:旧工作进程会逐步退出,仅剩旧主进程(62379)和新主进程+新工作进程
ps -aux | grep nginx

3.2.4 验证新版本

nginx -V

总结

传统升级:服务会短暂中断、适用于非核心业务、测试环境
平滑升级:服务不需要中断、适用于生产环境、核心业务

到此这篇关于Nginx升级的两种方式的文章就介绍到这了,更多相关Nginx升级内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Nginx 对访问量的控制

    详解Nginx 对访问量的控制

    本文详解的介绍了 Nginx 的 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模块,对请求访问量进行控制。非常具有实用价值,需要的朋友可以参考下
    2018-12-12
  • 详解nginx代理天地图做缓存解决跨域问题

    详解nginx代理天地图做缓存解决跨域问题

    这篇文章主要介绍了详解nginx代理天地图做缓存解决跨域问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Nginx配置虚拟主机的三种方法

    Nginx配置虚拟主机的三种方法

    本文主要介绍了Nginx配置虚拟主机的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Nginx 安全加固的几种方法

    Nginx 安全加固的几种方法

    本文详细介绍了Nginx服务器的安全加固方案,重点围绕权限设置、配置优化和系统防护三个方面,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03
  • 通过Nginx+Tomcat+Redis实现持久会话

    通过Nginx+Tomcat+Redis实现持久会话

    这篇文章主要介绍了通过Nginx+Tomcat+Redis实现持久会话的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-11-11
  • Nginx日志文件按日期分割的实战指南

    Nginx日志文件按日期分割的实战指南

    在Web服务器管理中,日志文件是监控服务器性能、分析用户行为和排查问题的重要工具,随着网站访问量的增长,日志文件的大小也会迅速增加,本文将介绍如何配置Nginx,使其日志文件能够自动按日期进行分割,需要的朋友可以参考下
    2025-10-10
  • nginx location指令(匹配顺序匹配冲突)实战示例详解

    nginx location指令(匹配顺序匹配冲突)实战示例详解

    这篇文章主要介绍了nginx location指令(实战示例匹配顺序匹配冲突)详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Nginx配置文件中location配置的多种场景

    Nginx配置文件中location配置的多种场景

    location主要做定位功能,根据uri来进行不同的定位,下面这篇文章主要给大家介绍了关于Nginx配置文件中location配置的多种场景,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • 安装OpenResty(Nginx仓库)

    安装OpenResty(Nginx仓库)

    这篇文章主要介绍了安装OpenResty(Nginx仓库),需要的朋友可以参考下
    2023-06-06
  • Nginx+Tomcat实现负载均衡、动静分离的原理解析

    Nginx+Tomcat实现负载均衡、动静分离的原理解析

    这篇文章主要介绍了Nginx+Tomcat实现负载均衡、动静分离的原理解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02

最新评论