在企业级生产环境中,出于安全考虑,很多服务器是完全断网的——也就是我们常说的“内网服务器”或“无互联网服务器”。这时候,如果需要安装 Nginx 这类常用软件,该怎么办?

今天,我就带大家一步步完成 CentOS 系统下 Nginx 的离线安装全流程,涵盖依赖处理、仓库配置、包下载、安装、自启配置和防火墙设置,全程可复制、可落地!

🎯 适用场景

  • 服务器无法访问公网
  • 需要统一部署 Nginx 到多台内网机器

📦 准备工作:一台可联网的“跳板机”

由于目标服务器不能联网,我们需要先在一台可联网的 CentOS 机器(与目标系统版本一致)上下载好所有安装包,再拷贝到内网服务器。

✅ 建议:跳板机系统版本与目标服务器保持一致(如均为 CentOS 7 或 CentOS 8)

🔧 步骤详解:从零开始离线安装 Nginx

1️⃣ 安装 yum-utils 工具

yum-utils 提供了 repotrack 命令,用于下载 RPM 包及其所有依赖。

yum -y install yum-utils

⚠️ 注意:这一步必须在可联网的跳板机上执行。

2️⃣ 添加 Nginx 官方 Yum 仓库

我们使用 Nginx 官方提供的稳定版仓库,确保软件来源安全可靠。

cat > /etc/yum.repos.d/nginx.repo << EOF
[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

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

🔐 安全提示:

  • gpgcheck=1 表示启用 GPG 签名验证,确保下载的 RPM 包未被篡改。
  • gpgkey 指向官方签名密钥,我们稍后会验证其真实性。

3️⃣ 清理缓存并重建本地元数据

yum clean all && yum makecache

这一步确保 yum 能正确读取新添加的仓库信息。

4️⃣ 查看可用的 Nginx 版本

yum list nginx*

输出示例:

nginx.x86_64 1:1.24.0-1.el7.ngx nginx-stable
nginx-debug.x86_64 1:1.24.0-1.el7.ngx nginx-stable

你可以根据需求选择稳定版(stable)或主线版(mainline)。

5️⃣ 下载 Nginx 及其所有依赖包(关键步骤!)

使用 repotrack 命令自动下载 Nginx 及其所有依赖项:

mkdir /root/nginx
cd /root/nginx
repotrack nginx.x86_64

📦 执行完成后,/root/nginx 目录下会包含:

  • nginx-1.24.0-1.el7.ngx.x86_64.rpm
  • openssl-libs, pcre, zlib 等所有依赖 RPM 包

✅ 这是实现离线安装的核心:把整个依赖树打包带走!

6️⃣ 拷贝安装包到内网服务器

将 /root/nginx 目录整体拷贝到目标服务器(可通过U盘、内网传输、scp等):

示例:使用 scp(如果跳板机可访问内网)

scp -r /root/nginx user@internal-server:/root/

7️⃣ 在内网服务器安装 Nginx

cd /root/nginx
rpm -Uvh --force --nodeps .rpm

⚠️ 参数说明:

  • –force:强制安装,即使已安装旧版本
  • –nodeps:忽略依赖检查(因为我们已打包全部依赖)

💡 建议:安装前可先用 rpm -K .rpm 验证包的签名(如果保留了 GPG 密钥)

8️⃣ 配置开机自启

systemctl enable --now nginx
  • –now 表示立即启动服务,无需再执行 systemctl start nginx

9️⃣ 配置防火墙(如使用 firewalld)

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
firewall-cmd --list-ports

开放 80(HTTP)和 443(HTTPS)端口,确保外部可访问。

好了,服务部署完成,300大洋到手!