
Nginx 的热部署(Hot Deployment)允许在不停止服务的情况下更新配置、证书或二进制文件,确保业务零中断。以下是 详细步骤 和 注意事项:
1. 热重载配置(最常见场景)
当修改 Nginx 配置文件(如 nginx.conf
或站点配置)后,无需重启服务,直接让 Nginx 重新加载配置:
# 检查配置语法是否正确(必须步骤)
sudo nginx -t
# 热重载配置
sudo nginx -s reload
原理:
- Master 进程检查新配置,启动新 Worker 进程。
- 旧 Worker 进程处理完当前请求后退出,实现无缝切换。
2. 升级 Nginx 二进制文件(零停机升级)
适用于 Nginx 版本升级或添加新模块:
(1) 备份旧二进制文件
cp /usr/sbin/nginx /usr/sbin/nginx.old
(2) 替换为新二进制文件
# 假设新二进制文件已编译好
cp /path/to/new/nginx /usr/sbin/nginx
(3) 向旧 Master 进程发送信号
# 获取旧 Master 进程 PID
old_pid=$(cat /run/nginx.pid)
# 通知旧 Master 启动新 Worker,并优雅关闭旧 Worker
kill -USR2 $old_pid
# 优雅关闭旧 Master(等待所有旧 Worker 退出)
kill -QUIT $old_pid
验证:
nginx -v # 检查版本是否更新
ps aux | grep nginx # 确认新进程已接管
3. 更新 SSL 证书(无需重启)
替换证书文件后直接热重载:
# 更新证书文件
cp new_cert.pem /etc/letsencrypt/live/example.com/fullchain.pem
cp new_key.key /etc/letsencrypt/live/example.com/privkey.pem
# 热重载配置(Nginx 会自动加载新证书)
nginx -s reload
注意:证书文件路径必须与配置中 ssl_certificate
和 ssl_certificate_key
一致。
4. 动态模块加载(Nginx 1.9.11+)
添加新模块无需重新编译主程序:
# 在 nginx.conf 中动态加载模块
load_module modules/ngx_http_brotli_filter_module.so;
操作步骤:
- 编译模块为
.so
文件(通过--add-dynamic-module
)。 - 将
.so
文件复制到 Nginx 模块目录(如/usr/lib/nginx/modules
)。 - 执行
nginx -s reload
。
5. 高级热部署技巧
(1) 双 Master 进程模式(用于二进制升级)
- 旧 Master 和新 Master 进程短暂共存,通过
kill -USR2
和kill -QUIT
平滑切换。
(2) 监控 Worker 进程退出
# 查看旧 Worker 是否完全退出
tail -f /var/log/nginx/error.log | grep "worker process is exiting"
(3) 回滚机制
如果热部署失败,快速回退:
# 回滚二进制文件
mv /usr/sbin/nginx.old /usr/sbin/nginx
# 强制重启(非优雅方式,会中断请求)
sudo systemctl restart nginx
6. 完整流程示例(二进制升级)
# 1. 检查当前版本
nginx -v
# 2. 编译新版本(假设已下载源码)
cd nginx-1.25.3
./configure --prefix=/etc/nginx --with-http_ssl_module
make
# 3. 备份旧二进制
cp /usr/sbin/nginx /usr/sbin/nginx.backup
# 4. 替换二进制
cp objs/nginx /usr/sbin/nginx
# 5. 向旧 Master 发送信号
kill -USR2 $(cat /run/nginx.pid)
sleep 1
kill -QUIT $(cat /run/nginx.pid.oldbin) # 旧 Master 退出
# 6. 验证
nginx -v
curl -I http://localhost
注意事项
- 语法检查:
执行nginx -t
确保配置无误,否则reload
会失败且保持旧配置运行。 - 长连接处理:
热重载时,旧 Worker 会等待活动连接完成(可通过worker_shutdown_timeout
设置超时)。 - 共享内存:
使用zone
定义的共享内存(如限流模块)在reload
时会被保留。 - 信号说明:
信号 作用 HUP
重新加载配置(同 reload
)USR2
升级二进制文件 WINCH
优雅关闭 Worker QUIT
优雅退出 Master
通过以上方法,Nginx 可以实现真正的 7×24 小时不间断服务,尤其适合高可用生产环境。
学在每日,进无止境!更多精彩内容请关注微信公众号。

原文出处:
内容由AI生成仅供参考,请勿使用于商业用途。如若转载请注明原文及出处。
出处地址:http://www.07sucai.com/tech/972.html
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。