这台服务器上跑着别人的项目,改配置必须假设"改错就是事故"。

三条纪律

  1. 只新增 location,绝不修改已有 location
  2. 改前必须备份,改后必须 nginx -t
  3. 用 nginx -s reload 平滑重载,不用 restart

落到脚本里长这样

TS=$(date +%Y%m%d-%H%M%S)
cp -a /etc/nginx/nginx.conf "/etc/nginx/nginx.conf.bak-$TS"

if nginx -t 2>&1; then
    nginx -s reload
else
    cp -a "/etc/nginx/nginx.conf.bak-$TS" /etc/nginx/nginx.conf   # 自动回滚
    exit 1
fi

顺手发现的一件事

/etc/nginx/conf.d/ 目录根本没有被 include。里面那两个 ui.conf 是另一个 nginx 实例 (另一个 systemd 服务)在用。如果当时想当然地把配置丢进 conf.d,改完会毫无效果, 然后花半天找"为什么配置不生效"。