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的升级或模块添加,特别适合生产环境使用。

相关推荐
骇客野人1 小时前
基于Nginx+Eureka+Apollo+Jenkins+SpringBoot Web系统分布式部署方案
nginx·eureka·jenkins
Kendra91914 小时前
从 0 到上线:单文件网页 App 部署到阿里云 ECS 全流程(Nginx+Node+PM2+PostgreSQL)
nginx·阿里云·云计算·部署·个人开发·今天吃什么
fthux18 小时前
不必下载整个仓库:GitZip Pro 让 GitHub 文件与文件夹批量下载更简单
前端·chrome·ai·edge·开源·github·firefox
暖核19 小时前
Nginx 从入门到实践:部署、配置、反向代理与负载均衡全解
运维·nginx·负载均衡
一水21 小时前
Pi :内置四工具源码拆解——文件锁、变更快照与 bash 隔离
开发语言·chrome·ai·bash
.柒宇.21 小时前
运维常见面试题_04_Nginx与DNS服务
运维·nginx·面试·dns
NGINX开源社区1 天前
NGINX Ingress Controller 5.5:安全性与性能提升,迁移更轻松
java·服务器·nginx
weixin_307779131 天前
PHP 大文件上传:内存占用、超时与最佳实践
linux·服务器·开发语言·nginx·php
闲云野鹤在人间1 天前
项目实战:LNMP-电商平台-ECshop
linux·运维·nginx·apache·lvs
暖核1 天前
Keepalived 高可用全解析:从 VRRP 原理到生产环境 Nginx 主备切换实践
网络·nginx·智能路由器