CentOS 7 下 Nginx 编译后热重启方案

在 CentOS 7 环境下对 Nginx 进行编译升级或添加模块时,可以通过以下方法实现不影响业务的热重启(无缝升级):

1. 准备工作

1.1 安装必要工具

bash 复制代码
yum install -y gcc make openssl-devel pcre-devel zlib-devel

1.2 获取当前编译参数

bash 复制代码
nginx -V 2>&1 | grep 'configure arguments'

重要:记录下所有配置参数,后续编译需要使用完全相同的参数。

2. 热升级步骤

2.1 下载相同/新版本源码

bash 复制代码
# 获取当前版本
nginx -v

# 下载源码(保持相同版本或升级)
wget http://nginx.org/download/nginx-1.20.2.tar.gz
tar zxvf nginx-1.20.2.tar.gz
cd nginx-1.20.2

2.2 配置编译参数(添加新模块)

bash 复制代码
./configure [之前记录的所有参数] --add-module=/path/to/new_module

2.3 编译新版本

bash 复制代码
make  # 不要执行make install

2.4 备份旧二进制文件

bash 复制代码
cp /usr/sbin/nginx /usr/sbin/nginx.old

2.5 替换新二进制文件

bash 复制代码
cp objs/nginx /usr/sbin/nginx

3. 热重启关键操作

3.1 向主进程发送USR2信号

bash 复制代码
kill -USR2 `cat /var/run/nginx.pid`

这会启动新的Nginx主进程和工作进程,新旧进程会并行运行。

3.2 向旧主进程发送WINCH信号

bash 复制代码
kill -WINCH `cat /var/run/nginx.pid.oldbin`

这会优雅关闭旧的工作进程,保留主进程以防回滚。

3.3 验证新进程

bash 复制代码
ps -ef | grep nginx

确认新进程正常运行且服务正常。

4. 最终确认或回滚

4.1 如果确认新版本正常

bash 复制代码
kill -QUIT `cat /var/run/nginx.pid.oldbin`

彻底关闭旧的主进程。

4.2 如果需要回滚

bash 复制代码
kill -HUP `cat /var/run/nginx.pid.oldbin`  # 重启旧工作进程
kill -QUIT `cat /var/run/nginx.pid`       # 关闭新主进程

5. 自动化脚本示例

bash 复制代码
#!/bin/bash

# 编译新版本
cd nginx-1.20.2
make

# 备份并替换
mv /usr/sbin/nginx /usr/sbin/nginx.old
cp objs/nginx /usr/sbin/nginx

# 热重启
kill -USR2 `cat /var/run/nginx.pid`
sleep 5
kill -WINCH `cat /var/run/nginx.pid.oldbin`

echo "升级完成,请验证服务"
echo "确认无误后执行: kill -QUIT `cat /var/run/nginx.pid.oldbin`"

注意事项

  1. 版本兼容性:确保新旧版本之间的配置兼容
  2. 模块兼容性:新增模块必须与当前Nginx版本兼容
  3. 长连接处理 :配置中应有 worker_shutdown_timeout 参数
  4. 日志分割:USR2信号也会重新打开日志文件,确保日志权限正确
  5. 监控:操作后密切监控服务器状态和错误日志

验证方法

bash 复制代码
# 检查版本
nginx -v

# 检查进程
ps -ef | grep nginx

# 检查错误日志
tail -f /var/log/nginx/error.log

这种热重启方式可以在不中断服务的情况下完成Nginx的升级或模块添加,特别适合生产环境使用。

相关推荐
艾莉丝努力练剑6 小时前
【Git:企业级开发模型】Git企业级Git工作流实战:基于Git Flow的分支模型与开发流程
服务器·git·ubuntu·gitee·centos·powershell·企业级开发模型
车前端6 小时前
现代 Nginx 优化实践:架构、配置与性能调优
前端·nginx
davenian7 小时前
< Chrome Extension: Video DownloadHelper > 获得 Premium 权限 Ver10.0.271.2
chrome·edge·windows 11·video·downloadhelper
q***87609 小时前
Nginx之rewrite重写功能
数据库·mysql·nginx
庚昀◟9 小时前
Wsl系统下使用Ubuntu下载官网Nginx并加入系统服务
linux·nginx·ubuntu
weixin_4624462310 小时前
【原创实践】安装与配置 lua-cjson 在宝塔 Nginx 上
nginx·junit·lua
武子康10 小时前
Java-179 FastDFS 高并发优化思路:max_connections、线程、目录与同步
java·开发语言·nginx·性能优化·系统架构·fastdfs·fdfs
w***375110 小时前
在 Ubuntu 22.04 上安装和配置 Nginx 的完整指南
linux·nginx·ubuntu
p***924810 小时前
Nginx location 和 proxy_pass 配置详解
服务器·网络·nginx
L***B56810 小时前
Nginx代理到https地址忽略证书验证配置
运维·nginx·https