如果之前是通过 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 的 NginxNginx 官方 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(或最新版),且配置得以保留。