改完 nginx 为什么一定要先 nginx -t
reload 成功不等于配置正确。
reload 的机制
nginx reload 时,主进程读新配置;如果解析失败,它会保留旧配置继续服务,只在日志里记一条错误。结果是:你以为改动生效了,实际上跑的还是旧配置。
所以 nginx -t 必须单独跑,它是唯一能在改动生效前就发现问题的手段。
最危险的一种中间态
配置里引用了一个还不存在的证书文件时,nginx -t 会失败,reload 不生效。此时磁盘上的配置文件是坏的,而运行中的配置是好的。如果这时候机器重启,nginx 就起不来了。
避免方式很简单:改动前先确认引用到的文件都存在,改完立刻 nginx -t 加 reload,两步都通过才算完成。
验证要看到响应
配置改动的最终判据不是 nginx -t 通过,而是实际请求返回符合预期。放行路径应当返回 200,应当拦截的路径应当返回 404,这两条都要逐条实测。