核心是配置与二进制解耦:配置统一存于 /etc/nginx/,用软链管理版本,升级只替换 sbin/nginx;每次升级前必须备份并验证配置,严禁 make install。
保障 Nginx 配置数据在版本升级中不丢失,核心不是“升级时保护”,而是把配置和二进制彻底解耦——配置不随 Nginx 本体变动,也不依赖安装路径或编译过程。只要配置独立存放、路径稳定、备份可验,哪怕换掉整个 sbin/nginx,配置依然毫发无损。
不要把 nginx.conf 或 conf.d/ 放在 /usr/local/nginx/conf/ 这类随源码安装自动生成的目录里。这类目录在 make install 时可能被覆盖或清空。
/etc/nginx/(Debian/Ubuntu/CentOS 通用),主配置固定为 /etc/nginx/nginx.conf
/etc/nginx/conf.d/,并确保该路径不在 Nginx 源码的 make install 覆盖范围内--prefix=/opt/nginx),仍应显式指定 --conf-path=/etc/nginx/nginx.conf,让运行时只读取外部配置升级 Nginx 二进制本身不碰配置;真正需要“回滚配置”时,才靠软链切换——这和升级动作无关,但能确保配置始终可控。
/etc/nginx/conf.d/v20260701/、/etc/nginx/conf.d/v20260815/
include /etc/nginx/conf.d/current/*.conf;,current 是指向某版本的软链接current 始终指向当前生效版本即可备份不是可选项,而是升级流程的前置校验步骤。未完成备份,就不允许执行任何替换操作。
/etc/nginx/、/etc/ssl/certs/、/etc/ssl/private/
nginx -t -c /tmp/nginx/etc/nginx/nginx.conf 确认语法有效这是防止配置意外丢失的最后一道防线。任何 make install 行为都会重写 conf/、html/ 等目录,极大概率覆盖或清空你辛苦维护的配置。
nginx -V 提取完整 configure 参数,新版本编译时原样复用make,新二进制位于 objs/nginx,直接复制覆盖旧 sbin/nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-1.24.0.bak