centos nginx如何升级与维护
小樊
36
2025-12-27 07:45:26
CentOS 上 Nginx 的升级与维护指南
一 升级前准备
- 确认安装方式与版本
- 包管理安装:执行 rpm -q nginx;若为 源码编译:执行 which nginx 与 nginx -V 查看路径与编译参数。
- 备份关键数据
- 配置:/etc/nginx;站点:/var/www/html;证书:/etc/ssl;二进制:/usr/sbin/nginx 或 /usr/local/nginx/sbin/nginx。
- 检查与依赖
- 系统信息:cat /etc/redhat-release、uname -r;依赖:yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel。
- 创建维护窗口与回退预案
- 选择低峰时段,保留旧二进制与旧配置,准备快速回滚脚本。
二 升级路径
- 方式一 YUM 包管理器升级(推荐)
- 添加仓库(二选一)
- EPEL:sudo yum install -y epel-release
- 官方稳定源:创建 /etc/yum.repos.d/nginx.repo,内容如下(自动匹配 $releasever/$basearch):
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
- 执行升级与验证
- 升级:sudo yum update nginx;指定版本:sudo yum install nginx-
- 配置检查:sudo nginx -t;重启:sudo systemctl restart nginx;状态:sudo systemctl status nginx
- 方式二 源码编译升级(特定版本或自定义模块)
- 备份与取参:cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak;nginx -V 复制 configure arguments
- 编译新版本(不执行 make install):
- 下载解压:wget http://nginx.org/download/nginx-.tar.gz && tar zxvf nginx-.tar.gz && cd nginx-
- 配置:./configure <原参数>;编译:make
- 平滑替换与切换
- 语法测试:.objs/nginx -t;替换二进制:cp objs/nginx /usr/local/nginx/sbin/
- 热升级:kill -USR2 $(cat /usr/local/nginx/logs/nginx.pid) → kill -WINCH $(cat /usr/local/nginx/logs/nginx.pid.oldbin) → 观察无异常后 kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid.oldbin)
- 回退要点
- 包管理:立即执行 sudo yum downgrade nginx 或回滚至已保存的 rpm 包
- 源码:将备份二进制 nginx_bak 拷回并发送 USR2/WINCH/QUIT 完成回滚
三 安全与版本策略
- 及时修复高危漏洞
- 例如修复 CVE-2025-23419 需 Nginx ≥ 1.27.0;若 CentOS 7 的 stable 源仅到 1.26.1,可切换到 mainline 官方源以获取 1.27+。
- 降低信息泄露
- 在 /etc/nginx/nginx.conf 的 http { server_tokens off; } 隐藏版本号,执行 nginx -s reload。
- 仓库选择建议
- 稳定优先:使用 stable 源;需要新特性或安全修复优先:使用 mainline 源(注意 mainline 变化更快)。
四 日常维护与巡检
- 配置与语法
- 变更前:sudo nginx -t;变更后:sudo systemctl reload nginx(零停机)。
- 日志与监控
- 错误日志:tail -f /var/log/nginx/error.log;访问日志按需分析;结合 systemctl status nginx 与 curl -I 探测后端健康。
- 备份与自动化
- 定期打包:0 2 * * * tar -czvf /backup/nginx_$(date +%Y%m%d).tar.gz /etc/nginx /var/www/html
- 性能与健康
- 核心参数:worker_processes(建议与 CPU 核数一致)、worker_connections;静态资源启用 gzip;必要时引入 CDN 与缓存策略。
- 证书与上游
- 证书有效期与链:openssl s_client -connect www.example.com:443 < /dev/null | openssl x509 -text;
- 上游可用性:curl -I http://backend/ | head -1,异常时联动后端与健康检查。
五 常见问题与排错
- 配置文件语法错误
- 修复前先 nginx -t 定位行号;回滚到上一个可用配置后再 reload。
- 平滑升级后旧进程未退出
- 确认新 master 已接管后,再对 oldbin 发送 QUIT;必要时回滚二进制并重新执行 USR2/WINCH/QUIT。
- 端口占用或启动失败
- 检查端口占用:ss -tulpen | grep ‘:80|:443’;确认 SELinux/防火墙策略;查看 error.log。
- 版本不符合安全要求
- 若 yum 源版本过低,切换到 mainline 官方源或采用 源码编译 获取 ≥ 1.27.0。