机房断网怎么装服务?Nginx 源码编译 + 自建内网 yum 仓库从零手把手教学

文章目录

Nginx 源码完整编译安装

一、实验整体思路 & 作用

1. 什么是源码安装?

yum/rpm 安装是别人提前编译好的程序包,直接安装;源码安装:下载软件官方原始.tar.gz源代码,在你本机服务器上,经过「配置→编译→安装」三步,生成可执行程序。

2. 源码安装 Nginx 的优势(实验目的)

  1. 自定义安装路径:可以指定软件装在/usr/local/nginx,方便统一管理;yum 安装默认分散在/usr/sbin/etc/nginx等目录;
  2. 自定义编译模块:编译时自由开启 / 关闭 Nginx 功能(反向代理、缓存、ssl、stream 四层代理等);
  3. 自由升级降级:不受 yum 软件源版本限制,可以安装官网任意版本;
  4. 企业生产环境常用,方便后期运维、二次开发扩展。

3. 完整四大阶段流程

  1. 安装编译依赖(系统缺少编译工具会报错)
  2. 下载 Nginx 源码压缩包、解压
  3. ./configure配置编译参数 →make编译代码 →make install安装程序
  4. 配置环境变量、测试启停 Nginx
  5. 编写 systemd 服务文件,支持systemctl start/stop/enable统一管理

二、分步拆解:每一条命令、参数、作用、为什么要执行

阶段 1:安装编译所需依赖包

[root@centos7 ~]# yum install gcc make pcre-devel zlib-devel

整条命令逐词拆解

  1. yum:CentOS7 系统软件管理器,用来在线安装 rpm 软件;

  2. install:yum 子命令,代表执行安装操作;

  3. 每个依赖包详细解释,

    缺一不可,漏装编译直接报错

为什么要先执行这条?

源码编译需要编译工具和底层功能库,系统最小化安装默认没有,不安装后面./configure会直接抛出依赖缺失错误。

阶段 2:下载 Nginx 官方源码包

[root@centos7 ~]# wget https://nginx.org/download/nginx-1.24.0.tar.gz

逐词解释

  1. wget:Linux 网络下载工具,从指定网址下载文件到本地;
  2. https://nginx.org/download/nginx-1.24.0.tar.gz:Nginx 官方稳定版源码下载地址;
  3. nginx-1.24.0.tar.gz:压缩包文件名,.tar.gz是 Linux 标准源码压缩格式。

执行目的

把官方完整源代码下载到服务器本地,后续解压编译。

补充:无外网服务器,需要本地电脑下载压缩包,rz 上传到服务器。

阶段 3:解压源码压缩包

[root@centos7 ~]# tar -xf nginx-1.24.0.tar.gz

参数逐字拆解

  1. tar:Linux 归档解压工具;
  2. -x:extract,解压文件;
  3. -f:file,指定要操作的压缩包文件,-f 必须放在所有参数最后
  4. nginx-1.24.0.tar.gz:待解压的压缩包。

执行效果 & 作用

解压后生成同名文件夹nginx-1.24.0,里面存放全部 Nginx 源代码、配置脚本、模块文件,必须进入该目录才能编译。

阶段 4:进入源码目录,执行 configure 配置

# 切换到源码文件夹[root@centos7 ~]# cd nginx-1.24.0/
[root@centos7 nginx-1.24.0]# ./configure --prefix=/usr/local/nginx

整条命令完整拆解

  1. ./configure:源码目录自带的配置检测脚本,核心作用 2 点: ① 自动检测系统环境、依赖库是否齐全;缺包会直接提示错误; ② 根据我们传入的参数,自动生成Makefile编译脚本,后续 make 命令依靠这个文件编译;

  2. --prefix=/usr/local/nginx

    最重要编译参数

    --prefix

    定义软件

    安装根目录

    ,所有 Nginx 文件统一放到这个路径下:

为什么要指定 prefix?

yum 安装文件分散,不好管理;源码自定义统一目录,后期查找配置、日志、程序非常方便。

阶段 5:编译 + 安装

[root@centos7 nginx-1.24.0]# make && make install

&&符号作用

前半段make执行成功,才会执行后半段make install;如果编译失败,不会执行安装,避免损坏文件。

拆分两条命令分别解释

  1. make:编译阶段 读取configure生成的 Makefile,调用 gcc 编译器,把 C 语言源代码编译成二进制可执行程序; 耗时几秒~几十秒,屏幕会打印大量编译日志。
  2. make install:安装阶段 把编译好的程序、默认配置、网页模板、日志目录,全部复制到--prefix指定的/usr/local/nginx目录。

验证安装是否成功

[root@centos7 ~]# ls /usr/local/nginx/conf html logs sbin

ls查看目录,出现 4 个文件夹代表安装完成:

阶段 6:配置全局环境变量(任意目录直接执行 nginx 命令)

第一条:临时生效环境变量

[root@centos7 nginx-1.24.0]# export PATH=$PATH:/usr/local/nginx/sbin/

逐段拆解:

  1. export:声明全局环境变量;
  2. PATH:系统命令搜索路径,系统执行命令时,只会去 PATH 里记录的文件夹查找程序;
  3. $PATH:保留原来系统自带的所有路径;
  4. :/usr/local/nginx/sbin/:追加 nginx 程序目录到 PATH。

临时生效缺点

只在当前终端窗口有效,关闭终端、重启服务器后失效。

第二条:写入用户环境变量文件,永久生效

[root@centos7 nginx-1.24.0]# echo 'export PATH=$PATH:/usr/local/nginx/sbin/' >> ~/.bashrc

逐词拆解:

  1. echo '内容':输出指定文本;
  2. >>:追加重定向,不覆盖文件原有内容;
  3. ~/.bashrc:当前用户(root)登录时自动加载的环境变量配置文件;
  4. 重启服务器、新开终端都会自动加载 PATH,任何位置直接输入 nginx 命令即可使用。

三、Nginx 基础使用命令 逐行详解

1. 启动 Nginx 服务

[root@server ~19:18:18]# nginx[root@server ~19:18:21]# ps -C nginxPID TTY TIME CMD7155? 00:00:00 nginx7156? 00:00:00 nginx# 查询nginx对应的端口号[root@server ~19:23:46]# ss -lntp | grep :80LISTEN0128*:80 *:* users:(("nginx",pid=7156,fd=6),("nginx",pid=7155,fd=6))# 关闭防火墙[root@server ~19:24:05]# systemctl disable firewalld.service --now

2. 验证 Nginx 是否正常运行

[root@centos7 ~]# curl -s http://localhost | grep Thank<p><em>Thank youforusing nginx.</em></p>

命令拆解:

  1. curl:Linux 网页访问工具,模拟浏览器发送 http 请求;
  2. -s:静默模式,不打印多余进度、错误信息;
  3. http://localhost:访问本机 80 端口 Nginx 服务;
  4. |管道符:把 curl 返回的网页内容传给后面命令;
  5. grep Thank:过滤包含 Thank 的字符串;

执行效果

输出<p><em>Thank you for using nginx.</em></p>代表页面正常返回,Nginx 启动成功。

3. 正常停止 Nginx(优雅关闭)

[root@centos7 ~]# nginx -s quit

4. 四条核心操作命令完整总结

  1. nginx:启动服务
  2. nginx -s quit:优雅停止,等待任务处理完再关闭
  3. nginx -s stop:强制立刻杀死进程,正在访问的用户会直接断开,生产环境不推荐
  4. nginx -s reload:平滑重载配置,不中断业务,修改 nginx.conf 后必须执行,加载新配置生效

四、配置 systemd 系统服务(systemctl 管理 nginx)

步骤 1:复制 sshd 服务模板,新建 nginx 服务文件

[root@centos7 ~]# cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/nginx.service

拆解:

  1. cp:复制文件命令;
  2. /usr/lib/systemd/system/sshd.service:系统自带 ssh 服务模板,格式标准,直接复制改参数即可;
  3. /etc/systemd/system/nginx.service:自定义系统服务存放目录,文件名 nginx.service,后缀必须.service

步骤 2:编辑服务配置文件

[root@centos7 ~]# vim /etc/systemd/system/nginx.service

vim文本编辑器,打开刚才复制的文件,删除原有 ssh 内容,写入下面配置:

[Unit]Description=Nginx server daemon

[Unit]区块:服务基础描述

[Service]Type=forkingExecStart=/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.confExecReload=/usr/local/nginx/sbin/nginx-sreloadExecStop=/usr/local/nginx/sbin/nginx-squit

[Service]区块:服务启停、重载核心配置

  1. Type=forking:Nginx 后台守护进程模式,主进程 fork 子进程,必须写 forking;
  2. ExecStart:systemctl start 执行的命令,指定 nginx 程序 + 完整配置文件路径;
  3. ExecReload:systemctl reload 执行的重载配置命令;
  4. ExecStop:systemctl stop 执行的优雅停止命令。
[Install]WantedBy=multi-user.target

[Install]区块:开机自启配置

步骤 3:重载 systemd 管理器,识别新服务

[root@centos7 ~]# systemctl daemon-reload

作用:新建 / 修改.service文件后,必须执行这条命令,让 systemd 系统管理器读取新的服务配置,否则 systemctl 找不到 nginx 服务。

步骤 4:设置开机自启,并立刻启动 Nginx

[root@centos7 ~]# systemctl enable nginx.service --now

参数拆分:

  1. enable:设置开机自启,服务器重启自动运行 nginx;
  2. --now:立刻执行 start,不用分开输入systemctl start nginx

配套 systemctl 操作命令(实验常用)

  1. 查看运行状态:systemctl status nginx
  2. 停止服务:systemctl stop nginx
  3. 重载配置:systemctl reload nginx
  4. 关闭开机自启:systemctl disable nginx

五、实验完整逻辑梳理

  1. 源码安装核心逻辑:装依赖 → 下源码 → 解压 → configure 检测环境定义路径 → make 编译 → make install 安装;
  2. 环境变量作用:简化命令,任意目录直接输入 nginx;
  3. nginx -s 信号:控制进程启停、重载配置;
  4. systemd 服务作用:统一用 systemctl 管理,支持开机自启、状态查看,企业标准运维方式;
  5. 源码安装对比 yum:高度自定义,版本自由,目录统一,适合生产环境搭建内网 yum 仓库、自定义 web 服务。

YUM 自建本地网络仓库实验完整讲解

实验环境:CentOS7 整体实验目标:自己搭建一台 YUM 软件源服务器,局域网内其他 Linux 客户端,可以通过 HTTP 网络,从你的服务器下载安装软件,不需要外网互联网

实验核心作用

  1. 内网环境无互联网场景:服务器不能上外网,搭建内网 yum 源,局域网机器安装软件,不用外网。企业机房经常这么做。
  2. 自定义软件仓库,可以统一存放自己常用软件包。
  3. 理解 yum 工作原理:yum 不是直接下载 rpm,先读取 repomd.xml 索引获取软件依赖关系,再下载 rpm 包。

整体四大步骤总思路

  1. 准备 rpm 软件包:把需要的软件 rpm 安装包全部下载到服务器
  2. createrepo 生成 YUM 仓库索引(repomd.xml):Yum 靠这个索引知道仓库里有哪些包、依赖关系是什么。你刚才报错Damaged repomd.xml就是这个索引文件损坏 / 缺失
  3. 用 Nginx 把目录发布成网页:让客户端能用 http 访问到 rpm 包和索引文件
  4. 客户端写 repo 文件,指向自建源,yum 安装测试

通俗类比: yum 仓库 = 网上软件商店; rpm 包 = 软件安装包; repomd.xml = 商店商品目录清单; nginx = 把商店对外开放; 客户端 tools.repo = 告诉 Linux:软件商店地址在哪里。


每一条命令:干什么 + 为什么这么写

📌第一部分:服务端操作(server 机器,搭建 yum 源)

1. 准备软件包

#创建rpms文件夹,用来临时存放下载的rpm包[root@server ~]# mkdir rpms#进入这个文件夹,后面下载的包全部存这里[root@server ~]# cd rpms
#下载软件包,以及依赖的软件包[root@server rpms]# yum install --downloadonly --downloaddir . vim open-vm-tools vsftpd lrzsz bash-completion nginx httpd mariadb-server

用ls 查看已安装的软件包

参数详解

⚠️注意:这条命令执行成功前提:server 机器本身要有外网可用 yum 源,才能把 rpm 包下载下来。

# 创建网页发布目录[root@server ~]# mkdir /usr/local/nginx/html/tools#把下载好全部rpm包移动到网页目录下Packages文件夹[root@server ~]# mv rpms /usr/local/nginx/html/tools/Packages
  1. mkdir /usr/local/nginx/html/tools/usr/local/nginx/html/是源码安装 nginx 的网页根目录,浏览器访问 nginx,读取的全部文件都放在这里。我们新建 tools 子目录专门放 yum 仓库。
  2. mv rpms /usr/local/nginx/html/tools/Packages把刚刚下载 rpm 包的 rpms 文件夹,移动并重命名为Packages。yum 仓库约定俗成 rpm 包放在 Packages 目录。

现在路径:/usr/local/nginx/html/tools/Packages/xxx.rpm


2. 创建 yum 仓库索引

#安装createrepo工具[root@server ~]# yum install -y createrepo

createrepo是专门用来生成 yum 仓库元数据索引的工具,CentOS 系统默认没有安装,必须手动装。

# 创建仓库索引信息[root@server ~]# createrepo /usr/local/nginx/html/tools/

createrepo 仓库根目录这条命令扫描tools目录下面所有 rpm 包,自动计算依赖关系,自动生成 repomd.xml 索引文件,存放在/usr/local/nginx/html/tools/repodata/下面。

repomd.xml就是 yum 的商品清单! 如果这个文件损坏、缺失,客户端执行 yum 就报Damaged repomd.xml file错误。 每次新增 rpm 软件包之后,必须重新执行一次 createrepo 刷新索引,否则客户端看不到新包。


3.Nginx 配置,发布仓库(让网络上客户端可以 http 访问仓库)

[root@server ~]# vim /usr/local/nginx/conf/nginx.conf# 在http块中新增一行autoindex on;http{autoindex on;.....}vim`编辑 nginx 主配置文件`autoindex on;

❗不要写在 server {} 块外面!示例写 http 全局块所有站点全部开启目录浏览。

#重载nginx配置[root@server ~]# systemctl reload nginx

reload平滑加载配置,不停止已经运行 nginx 进程。修改 nginx.conf 后必须 reload 配置才能生效。

如果写restart nginx会直接停止 web 服务,业务中断,实验优先 reload。

✅到此服务端全部做完!现在浏览器访问http://server.laoma.cloud/tools/,应该可以看到网页列出 repodata 文件夹、Packages 文件夹。


📌第二部分:客户端操作(client 机器,使用自建 yum 源)

客户端配置验证
#备份原有仓库[root@client ~]# mkdir /etc/yum.repos.d/old[root@client ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/old
  1. /etc/yum.repos.d/系统所有 yum 仓库配置文件全部放在这个目录!后缀必须是.repo
  2. mkdir old创建备份文件夹
  3. mv *.repo old把系统原来所有 repo 源文件移动备份。

实验目的:把外网源全部移走,强制客户端只使用我们自己搭建的自建 yum 源,排除其他源干扰,做纯净测试。 如果不移动旧源,yum 会同时读取多个源,分不清软件来自哪个仓库。

#快速写入tools.repo仓库配置文件[root@client ~]# cat << 'EOF' > /etc/yum.repos.d/tools.repo[tools]name=centos7 tools from server.jiang.cloudbaseurl=http://server.jiang.cloud/tools/enabled=1gpgcheck=0EOF

cat << 'EOF' >文件名:shell Here‑Doc 语法,把两行 EOF 中间内容直接写入文件,不用 vim 手动敲,实验脚本经常用。

repo 每一行详细解释(非常重要)

[tools]#仓库ID,名字随便起,唯一标识符,不能有空格name=centos7 tools from server.jiang.cloud#仓库描述名字,给人看,随便写baseurl=http://server.jiang.cloud/tools/#【最重要】yum仓库根地址!指向服务端nginx发布的仓库地址enabled=1#1启用这个源,0关闭gpgcheck=0#0关闭rpm数字签名校验;自建仓库没有数字签名,必须关闭,否则yum报错

注意:server.laoma.cloud需要做域名解析!要么修改客户端/etc/hosts把域名指向 server 服务器 IP,否则域名无法解析。也可以直接写 IP 地址baseurl=http://192.168.x.x/tools/

[root@client ~]# ls /etc/yum.repos.d/old tools.repo

查看目录确认:现在只有 tools.repo 是激活的源,其他 repo 全部移动到 old 备份文件夹。

#测试安装软件[root@client ~]# yum install -y httpd

yum 读取tools.repo里面 baseurl,访问 server 服务器repomd.xml索引,查找 httpd 软件包,下载 rpm 并且自动处理依赖完成安装。

❗高频踩坑点

  1. 服务端执行createrepo失败,没有生成 repodata 文件夹,客户端直接报 xml 损坏
  2. nginx 没有配置autoindex on,访问目录 403,yum 访问仓库失败
  3. baseurl 写错地址,末尾/不能丢
  4. 新增 rpm 包忘记重新执行 createrepo,客户端看不到新增软件
  5. 客户端没有把旧 repo 移走,多个源混淆
  6. 域名无法解析:要么改 hosts,baseurl 直接写服务器 IP
  7. 防火墙:server 机器防火墙放行 80 端口,否则客户端访问不了 nginx 网页

排查思路 客户端报错 damaged repomd.xml:

  1. 在客户端浏览器访问 baseurl 地址,看能不能打开网页,能不能访问到repodata/repomd.xml
  2. 如果网页打不开:nginx 配置、防火墙、域名解析问题
  3. 如果网页打开但是没有 repomd.xml →服务端没有执行 createrepo

同步仓库

# 将仓库中软件包和元数据全部同步到本地[root@client ~]# reposync --repoid=tools[root@client ~]# createrepo tools[root@client ~]# ls tools/Packages repodata

参考:yum-REPOSYNC(8)