如果之前是通过 EPEL 仓库 安装的 Nginx:
sudo dnf install -y epel-release
sudo dnf install -y nginx
在 Rocky Linux 9(以及 RHEL 9 / CentOS Stream 9) 中,EPEL 提供的 nginx 实际上是一个 元包(meta-package),它会依赖并安装 nginx-core 和若干 nginx-mod-* 模块包。直接升级会看到冲突的包名是 nginx-core-2:1.20.1-24.el9.x86_64。
✅ 正确升级路径:从 EPEL 的 Nginx 切换到官方 Nginx
由于 EPEL 的 Nginx 和 Nginx 官方 RPM 包 是 互不兼容的两个软件包体系(文件路径虽相同,但 RPM 包名和所有权不同),不能直接 dnf upgrade 跨源升级,必须 先卸载 EPEL 版本,再安装官方版本。
🔧 完整操作步骤
1️⃣ 备份你的 Nginx 配置(非常重要!)
sudo cp -r /etc/nginx /etc/nginx.bak_$(date +%F)
# 可选:备份日志或网站内容
sudo cp -r /var/log/nginx /var/log/nginx.bak_$(date +%F)
即使配置目录结构相似,不同版本默认配置可能有差异,备份可避免服务中断。
2️⃣ 完全卸载 EPEL 安装的 Nginx
# 查看所有已安装的 nginx 相关包
rpm -qa | grep nginx
典型输出:
nginx-1.20.1-24.el9.x86_64
nginx-core-1.20.1-24.el9.x86_64
nginx-mod-http-image-filter-1.20.1-24.el9.x86_64
nginx-mod-http-perl-1.20.1-24.el9.x86_64
...
全部移除:
sudo dnf remove nginx nginx-core nginx-mod-\* -y
✅ 这会删除所有 EPEL 提供的 Nginx 组件,但 不会删除
/etc/nginx目录(因为 RPM 标记为“配置文件”,卸载时保留)。
验证是否卸干净:
rpm -q nginx nginx-core
# 应提示 "package is not installed"
3️⃣ 添加 Nginx 官方仓库
sudo tee /etc/yum.repos.d/nginx.repo <<'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/9/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
导入 GPG 密钥:
sudo rpm --import https://nginx.org/keys/nginx_signing.key
💡 Rocky Linux 9 兼容 CentOS 9 的官方 Nginx 包,所以用
centos/9路径是正确的。
4️⃣ 安装官方最新版 Nginx
sudo dnf clean all
sudo dnf install nginx -y
验证版本:
nginx -v
# 输出应类似:nginx version: nginx/1.28.1
5️⃣ 恢复你的配置
因为 EPEL 卸载后 /etc/nginx 仍保留,你可以:
✅ 方式一:直接使用原有配置(推荐先测试)
sudo nginx -t
如果提示语法 OK,说明配置兼容。
⚠️ 注意:官方 Nginx 默认 不加载
modules/*.conf,如果你用了 EPEL 的模块化配置(如conf.d/或modules/),需确保主配置nginx.conf中包含它们:
include /etc/nginx/conf.d/*.conf;
🔁 方式二:对比合并(更安全)
查看官方默认配置位置:
rpm -ql nginx | grep nginx.conf
# 通常是 /etc/nginx/nginx.conf.rpmnew(如果覆盖)
或者直接参考官方默认配置逻辑,将你的 server 块、upstream 等迁移到新结构中。
6️⃣ 启动并启用服务
sudo systemctl start nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx
检查端口监听:
ss -tulnp | grep :80
📌 后续维护建议
- 不要混用 EPEL 和官方 Nginx 仓库,否则未来升级还会冲突。
- 如果你将来想回退到 EPEL 版本,同样需要先卸载官方版。
- 官方 Nginx 更新更快,适合需要新特性的场景;EPEL 版本更稳定,适合保守环境。
✅ 总结
| 步骤 | 操作 |
|---|---|
| 1 | 备份/etc/nginx |
| 2 | dnf remove nginx nginx-core nginx-mod-\* |
| 3 | 添加官方nginx.repo |
| 4 | dnf install nginx |
| 5 | 检查并恢复配置(nginx -t) |
| 6 | systemctl enable --now nginx |
完成以上步骤后,你的 Nginx 就成功从 EPEL 1.20.1 升级到了 官方 1.28.1(或最新版),且配置得以保留。