CentOS 7.5 升级 Nginx 至 1.26.1 操作记录
📌 环境说明
-
操作系统:CentOS Linux release 7.5.1804 (Core)
-
原 Nginx 版本:
1.16.1(通过 YUM 安装,且带有全套nginx-mod-*模块) -
目标版本:
1.26.1(为了修复近期的高危安全漏洞 CVE) -
核心难点:CentOS 7 已 EOL,官方和第三方仓库对 CentOS 7 的最新版本模块支持存在滞后和冲突。
🛠️ 第一步:升级前准备与备份
1. 备份现有的 Nginx 配置文件
bash
复制
下载
sudo cp -r /etc/nginx /etc/nginx.bak.$(date +%F)
2. 配置 Nginx 官方 YUM 源
由于 CentOS 7 默认源版本太旧,需要添加官方源获取最新版。
bash
复制
下载
sudo vi /etc/yum.repos.d/nginx.repo
写入以下内容:
ini
复制
下载
[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 module_hotfixes=true
3. 导入 GPG 密钥并刷新缓存
bash
复制
下载
sudo rpm --import https://nginx.org/keys/nginx_signing.key sudo yum clean all sudo yum makecache
🚀 第二步:清理旧环境与安装新版核心
1. 移除旧版 Nginx 及其绑定的旧模块(关键步骤)
因为原系统的 nginx-mod-* 是与旧版本强绑定的,必须连同主程序一起卸载,否则升级会失败。
bash
复制
下载
sudo yum remove nginx nginx-mod-*
2. 安装最新版 Nginx 核心
执行安装命令,此时 YUM 会从官方源拉取最新的 1.26.1 版本。
bash
复制
下载
sudo yum install nginx -y
⚠️ 第三步:关于扩展模块的特殊处理(踩坑记录)
【排查过程】
-
尝试重装旧模块或
nginx-all-modules时,发现系统试图从epel源安装1.20.1版本的模块,与你新装的1.26.1核心产生 ABI 不兼容(依赖冲突)。 -
尝试从第三方源(CodeIT)获取,但由于 CentOS 7 已停止维护,官方脚本和仓库已无法正常获取针对 EL7 的新版包。
-
尝试源码编译准备作为保底方案。
【最终结论】
运行 nginx -t 检查发现,当前业务配置并未使用到 stream(四层代理)、mail 等特殊模块。
处理结果:无需强行安装扩展模块,仅保留 Nginx 核心即可满足现有业务需求,既安全又避免了包冲突。
✅ 第四步:验证与收尾
1. 检查配置语法
bash
复制
下载
sudo nginx -t # 输出提示:syntax is ok / test is successful
2. 重启服务并查看状态
bash
复制
下载
sudo systemctl restart nginx sudo systemctl status nginx # 输出提示:Active: active (running)
3. 设置开机自启
注意:新安装后 Nginx 默认可能是 disabled 状态,必须手动开启。
bash
复制
下载
sudo systemctl enable nginx
4. 验证版本
bash
复制
下载
nginx -v # 输出提示:nginx version: nginx/1.26.1
💡 核心经验总结(Tips)
-
CentOS 7 EOL 的痛点:在 CentOS 7 上通过 YUM 安装高版本软件时,极易遇到官方源与第三方源(EPEL)版本脱节的问题。如果新版本依赖旧的 EPEL 模块,直接装会报错。
-
模块化认知:Nginx 能启动且
nginx -t通过,说明核心功能正常。如果代码没用到stream等高级模块,千万别为了“看着全”去装全量模块,容易给自己挖坑。 -
平滑替代方案:如果未来业务确实需要
stream模块,由于目前没有匹配1.26.1的 RPM 包,唯一的解决办法是下载 1.26.1 源码,使用--with-stream=dynamic和--with-compat进行源码编译,生成.so文件后通过load_module加载。
更多推荐

所有评论(0)