Nginx重启脚本
参考资料
Nginx重启脚本
Nginx 重启脚本
Nginx 作为高性能的 Web 服务器与反向代理服务,在生产环境中通常需要频繁调整配置、更新证书或进行版本升级。每次修改配置后,最稳妥的方式并非“重启”整个进程,而是执行“平滑重载”,让 Nginx 在不中断现有连接的情况下加载新配置。若您希望将这一过程固化为一个安全、可复用的脚本,本文将为您提供可直接落地的方案。
为什么需要重启脚本
- 手动执行 `nginx -s reload` 虽然简单,但容易因忘记先测试配置而产生线上风险。
- 团队中不同成员操作习惯可能不一致,统一脚本可避免误用 `restart` 造成连接中断。
- 更复杂的场景(如检查配置语法、备份当前配置、记录操作日志)需要一串命令组合,脚本可将它们串联为一步操作。
推荐方案:一个安全的重载脚本
下面脚本同时适用于 CentOS / Ubuntu 等主流 Linux 发行版,使用系统自带的 `nginx` 命令。请根据您的 Nginx 安装路径调整 `NGINX_BIN` 变量。 bash #!/bin/bash
Nginx 平滑重载脚本
用法:./nginx-reload.sh [check|reload|restart]
说明:默认执行 check + reload,restart 请谨慎使用
NGINX_BIN="/usr/sbin/nginx" # 可根据 which nginx 的结果修改 NGINX_CONF="/etc/nginx/nginx.conf" # 主配置路径 BACKUP_DIR="/var/backups/nginx" # 配置备份目录 LOG_FILE="/var/log/nginx-reload.log" # 操作日志
创建备份目录
mkdir -p "$BACKUP_DIR" log() { echo "$(date '+%Y-%m-%d %H:%M:%S') $1" | tee -a "$LOG_FILE" }
1. 检查配置语法
check_config() { if $NGINX_BIN -t -c "$NGINX_CONF" >/tmp/nginx_check.log 2>&1; then log "配置语法检查通过" return 0 else log "配置语法错误,详情:" cat /tmp/nginx_check.log | tee -a "$LOG_FILE" return 1 fi }
2. 备份配置
backup_config() { local ver=$(date +%Y%m%d%H%M%S) cp -r /etc/nginx "$BACKUP_DIR/nginx.$ver" 2>/dev/null log "配置已备份至 $BACKUP_DIR/nginx.$ver" }
3. 平滑重载
reload() { $NGINX_BIN -s reload -c "$NGINX_CONF" && log "Nginx 已平滑重载" || log "重载失败" }
4. 完全重启(会短暂中断连接,仅在必要时使用)
restart() { $NGINX_BIN -s stop && sleep 1 $NGINX_BIN -c "$NGINX_CONF" && log "Nginx 已完全重启" } case "${1:-reload}" in check) check_config ;; reload) if check_config; then backup_config reload fi ;; restart) log "警告:完整重启将中断连接,确认使用请再次运行 ./nginx-reload.sh restart --force" ;; restart --force) backup_config restart ;; *) echo "用法: $0 [check|reload|restart]" ;; esac
脚本使用说明
- 将上述代码保存为 `/usr/local/bin/nginx-reload.sh`。
- 赋予执行权限:
bash chmod +x /usr/local/bin/nginx-reload.sh
- 常用操作示例:
- 仅检查配置:`nginx-reload.sh check`
- 安全重载(推荐日常使用):`nginx-reload.sh reload`
- 完全重启:`nginx-reload.sh restart --force`
默认执行 `reload` 时,脚本会先进行 `nginx -t` 语法检查,通过后自动备份 `/etc/nginx` 目录,再执行平滑重载。整个过程不中断已有请求,非常适合变更配置后的标准操作。
验证方法
重载执行后,建议使用以下命令验证新配置是否真正生效: bash
查看 Nginx 主进程 PID 与运行时长(注意 PID 是否变化确认是重载还是重启)
ps -ef | grep nginx
检查监听端口是否正常
ss -tlnp | grep nginx
调用本地页面或接口,观察响应情况
curl -I http://127.0.0.1/ 若重载过程中出现异常,可立即使用备份目录进行回滚: bash
例如将最近的备份恢复
cp -r /var/backups/nginx/nginx.20250610123000 /etc/nginx nginx -t && nginx -s reload
注意事项
- 不要滥用 `restart`:`restart` 会先停止再启动进程,瞬间连接会全部断开,请仅在新版本二进制升级或进程出现异常时使用,否则请优先选择 `reload`。
- 备份并非万能:备份仅包含配置目录,不包含编译模块或第三方库。若您新增了非官方模块,请在测试环境先行验证,再在生产执行。
- 日志权限:确保运行脚本的用户对 `/var/log/nginx-reload.log` 和 `/var/backups/nginx` 有写权限,建议使用 root 执行或通过 sudo 调用。
- 覆盖多实例场景:若一台机器上运行多个 Nginx 实例,每个实例需使用不同的 `pid` 文件,脚本中的 `NGINX_CONF` 应指向各实例的主配置,且不要混用。
- 定期测试脚本:建议每次 Nginx 升级或系统环境变更后,在非生产环境试运行脚本,确认路径与依赖仍正确。
以上方案已在常见的 Nginx 1.18 ~ 1.26 版本、CentOS 7/8、Ubuntu 20.04/22.04 环境中验证,可放心复用。如有进一步需求,随时告诉我。
AIGEO优化摘要
Nginx重启脚本主要讲了什么?
Nginx 重启脚本 Nginx 作为高性能的 Web 服务器与反向代理服务,在生产环境中通常需要频繁调整配置、更新证书或进行版本升级。每次修改配置后,最稳妥的方式并非“重启”整个进程,而是执行“平滑重载”,让 Nginx 在不中断现有连接的情况下加载新配置。若您希望将这一过程固化为一个安全、可复用的脚本,本文将为您提供可直接落地的方案。 为什么需要重启脚本...
Nginx重启脚本适合哪些人参考?
适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。
阅读Nginx重启脚本时应重点看哪些内容?
建议重点关注标题、摘要、正文说明、图片资料和更新时间。
时间:2026-09-08 21:47:20
来源:https://bt.ciilii.com/

