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

📅 2026/7/30 2:32:48
机房断网怎么装服务?Nginx 源码编译 + 自建内网 yum 仓库从零手把手教学
文章目录Nginx 源码完整编译安装一、实验整体思路 作用1. 什么是源码安装2. 源码安装 Nginx 的优势实验目的3. 完整四大阶段流程二、分步拆解每一条命令、参数、作用、为什么要执行阶段 1安装编译所需依赖包整条命令逐词拆解为什么要先执行这条阶段 2下载 Nginx 官方源码包逐词解释执行目的阶段 3解压源码压缩包参数逐字拆解执行效果 作用阶段 4进入源码目录执行 configure 配置整条命令完整拆解为什么要指定 prefix阶段 5编译 安装符号作用拆分两条命令分别解释验证安装是否成功阶段 6配置全局环境变量任意目录直接执行 nginx 命令第一条临时生效环境变量临时生效缺点第二条写入用户环境变量文件永久生效三、Nginx 基础使用命令 逐行详解1. 启动 Nginx 服务2. 验证 Nginx 是否正常运行执行效果3. 正常停止 Nginx优雅关闭4. 四条核心操作命令完整总结四、配置 systemd 系统服务systemctl 管理 nginx步骤 1复制 sshd 服务模板新建 nginx 服务文件步骤 2编辑服务配置文件步骤 3重载 systemd 管理器识别新服务步骤 4设置开机自启并立刻启动 Nginx配套 systemctl 操作命令实验常用五、实验完整逻辑梳理YUM 自建本地网络仓库实验完整讲解实验核心作用整体四大步骤总思路每一条命令干什么 为什么这么写第一部分服务端操作server 机器搭建 yum 源1. 准备软件包参数详解2. 创建 yum 仓库索引3.Nginx 配置发布仓库让网络上客户端可以 http 访问仓库第二部分客户端操作client 机器使用自建 yum 源客户端配置验证❗高频踩坑点同步仓库Nginx 源码完整编译安装一、实验整体思路 作用1. 什么是源码安装yum/rpm 安装是别人提前编译好的程序包直接安装源码安装下载软件官方原始.tar.gz源代码在你本机服务器上经过「配置→编译→安装」三步生成可执行程序。2. 源码安装 Nginx 的优势实验目的自定义安装路径可以指定软件装在/usr/local/nginx方便统一管理yum 安装默认分散在/usr/sbin、/etc/nginx等目录自定义编译模块编译时自由开启 / 关闭 Nginx 功能反向代理、缓存、ssl、stream 四层代理等自由升级降级不受 yum 软件源版本限制可以安装官网任意版本企业生产环境常用方便后期运维、二次开发扩展。3. 完整四大阶段流程安装编译依赖系统缺少编译工具会报错下载 Nginx 源码压缩包、解压./configure配置编译参数 →make编译代码 →make install安装程序配置环境变量、测试启停 Nginx编写 systemd 服务文件支持systemctl start/stop/enable统一管理二、分步拆解每一条命令、参数、作用、为什么要执行阶段 1安装编译所需依赖包[rootcentos7 ~]# yum install gcc make pcre-devel zlib-devel整条命令逐词拆解yumCentOS7 系统软件管理器用来在线安装 rpm 软件installyum 子命令代表执行安装操作每个依赖包详细解释缺一不可漏装编译直接报错gccC 语言编译器Nginx 是 C 语言开发没有 gcc 无法把源码转成可执行程序make编译自动化工具配合 configure 生成编译脚本pcre-devel正则表达式库Nginx 的rewrite地址重写功能依赖它不带-devel只是运行库源码编译必须带 devel 开发包zlib-devel压缩库Nginx 网页 gzip 压缩功能依赖该开发库。为什么要先执行这条源码编译需要编译工具和底层功能库系统最小化安装默认没有不安装后面./configure会直接抛出依赖缺失错误。阶段 2下载 Nginx 官方源码包[rootcentos7 ~]# wget https://nginx.org/download/nginx-1.24.0.tar.gz逐词解释wgetLinux 网络下载工具从指定网址下载文件到本地https://nginx.org/download/nginx-1.24.0.tar.gzNginx 官方稳定版源码下载地址nginx-1.24.0.tar.gz压缩包文件名.tar.gz是 Linux 标准源码压缩格式。执行目的把官方完整源代码下载到服务器本地后续解压编译。补充无外网服务器需要本地电脑下载压缩包rz 上传到服务器。阶段 3解压源码压缩包[rootcentos7 ~]# tar -xf nginx-1.24.0.tar.gz参数逐字拆解tarLinux 归档解压工具-xextract解压文件-ffile指定要操作的压缩包文件-f 必须放在所有参数最后nginx-1.24.0.tar.gz待解压的压缩包。执行效果 作用解压后生成同名文件夹nginx-1.24.0里面存放全部 Nginx 源代码、配置脚本、模块文件必须进入该目录才能编译。阶段 4进入源码目录执行 configure 配置# 切换到源码文件夹[rootcentos7 ~]# cd nginx-1.24.0/cdchange directory切换工作目录不进入源码目录系统找不到./configure脚本命令报错。[rootcentos7 nginx-1.24.0]# ./configure --prefix/usr/local/nginx整条命令完整拆解./configure源码目录自带的配置检测脚本核心作用 2 点 ① 自动检测系统环境、依赖库是否齐全缺包会直接提示错误 ② 根据我们传入的参数自动生成Makefile编译脚本后续 make 命令依靠这个文件编译--prefix/usr/local/nginx最重要编译参数--prefix定义软件安装根目录所有 Nginx 文件统一放到这个路径下程序二进制文件/usr/local/nginx/sbin/nginx配置文件/usr/local/nginx/conf/nginx.conf网页根目录/usr/local/nginx/html/日志文件/usr/local/nginx/logs/为什么要指定 prefixyum 安装文件分散不好管理源码自定义统一目录后期查找配置、日志、程序非常方便。阶段 5编译 安装[rootcentos7 nginx-1.24.0]# make make install符号作用前半段make执行成功才会执行后半段make install如果编译失败不会执行安装避免损坏文件。拆分两条命令分别解释make编译阶段 读取configure生成的 Makefile调用 gcc 编译器把 C 语言源代码编译成二进制可执行程序 耗时几秒几十秒屏幕会打印大量编译日志。make install安装阶段 把编译好的程序、默认配置、网页模板、日志目录全部复制到--prefix指定的/usr/local/nginx目录。验证安装是否成功[rootcentos7 ~]# ls /usr/local/nginx/conf html logs sbinls查看目录出现 4 个文件夹代表安装完成conf存放 nginx.conf 主配置文件html网站静态页面存放目录logs访问日志、错误日志sbinnginx 主启动程序阶段 6配置全局环境变量任意目录直接执行 nginx 命令第一条临时生效环境变量[rootcentos7 nginx-1.24.0]# export PATH$PATH:/usr/local/nginx/sbin/逐段拆解export声明全局环境变量PATH系统命令搜索路径系统执行命令时只会去 PATH 里记录的文件夹查找程序$PATH保留原来系统自带的所有路径:/usr/local/nginx/sbin/追加 nginx 程序目录到 PATH。临时生效缺点只在当前终端窗口有效关闭终端、重启服务器后失效。第二条写入用户环境变量文件永久生效[rootcentos7 nginx-1.24.0]# echo export PATH$PATH:/usr/local/nginx/sbin/ ~/.bashrc逐词拆解echo 内容输出指定文本追加重定向不覆盖文件原有内容~/.bashrc当前用户root登录时自动加载的环境变量配置文件重启服务器、新开终端都会自动加载 PATH任何位置直接输入 nginx 命令即可使用。三、Nginx 基础使用命令 逐行详解1. 启动 Nginx 服务[rootserver ~19:18:18]# nginx[rootserver ~19:18:21]# ps -C nginxPID TTY TIME CMD7155? 00:00:00 nginx7156? 00:00:00 nginx# 查询nginx对应的端口号[rootserver ~19:23:46]# ss -lntp | grep :80LISTEN0128*:80 *:* users:((nginx,pid7156,fd6),(nginx,pid7155,fd6))# 关闭防火墙[rootserver ~19:24:05]# systemctl disable firewalld.service --now原理读取/usr/local/nginx/conf/nginx.conf配置后台 fork 主进程 工作进程监听 80 端口前提环境变量配置成功否则需要写全路径/usr/local/nginx/sbin/nginx。2. 验证 Nginx 是否正常运行[rootcentos7 ~]# curl -s http://localhost | grep ThankpemThank youforusing nginx./em/p命令拆解curlLinux 网页访问工具模拟浏览器发送 http 请求-s静默模式不打印多余进度、错误信息http://localhost访问本机 80 端口 Nginx 服务|管道符把 curl 返回的网页内容传给后面命令grep Thank过滤包含 Thank 的字符串执行效果输出pemThank you for using nginx./em/p代表页面正常返回Nginx 启动成功。3. 正常停止 Nginx优雅关闭[rootcentos7 ~]# nginx -s quit-ssignal向 nginx 主进程发送信号quit优雅退出信号Nginx 会等待当前已连接客户端请求全部处理完毕再关闭进程不会强制断开用户。4. 四条核心操作命令完整总结nginx启动服务nginx -s quit优雅停止等待任务处理完再关闭nginx -s stop强制立刻杀死进程正在访问的用户会直接断开生产环境不推荐nginx -s reload平滑重载配置不中断业务修改 nginx.conf 后必须执行加载新配置生效四、配置 systemd 系统服务systemctl 管理 nginx步骤 1复制 sshd 服务模板新建 nginx 服务文件[rootcentos7 ~]# cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/nginx.service拆解cp复制文件命令/usr/lib/systemd/system/sshd.service系统自带 ssh 服务模板格式标准直接复制改参数即可/etc/systemd/system/nginx.service自定义系统服务存放目录文件名 nginx.service后缀必须.service。步骤 2编辑服务配置文件[rootcentos7 ~]# vim /etc/systemd/system/nginx.servicevim文本编辑器打开刚才复制的文件删除原有 ssh 内容写入下面配置[Unit]DescriptionNginx server daemon[Unit]区块服务基础描述Description服务名称描述systemctl status 时会显示[Service]TypeforkingExecStart/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]区块服务启停、重载核心配置TypeforkingNginx 后台守护进程模式主进程 fork 子进程必须写 forkingExecStartsystemctl start 执行的命令指定 nginx 程序 完整配置文件路径ExecReloadsystemctl reload 执行的重载配置命令ExecStopsystemctl stop 执行的优雅停止命令。[Install]WantedBymulti-user.target[Install]区块开机自启配置multi-user.target系统多用户命令行模式代表服务器开机进入命令行时自动启动该服务。步骤 3重载 systemd 管理器识别新服务[rootcentos7 ~]# systemctl daemon-reload作用新建 / 修改.service文件后必须执行这条命令让 systemd 系统管理器读取新的服务配置否则 systemctl 找不到 nginx 服务。步骤 4设置开机自启并立刻启动 Nginx[rootcentos7 ~]# systemctl enable nginx.service --now参数拆分enable设置开机自启服务器重启自动运行 nginx--now立刻执行 start不用分开输入systemctl start nginx配套 systemctl 操作命令实验常用查看运行状态systemctl status nginx停止服务systemctl stop nginx重载配置systemctl reload nginx关闭开机自启systemctl disable nginx五、实验完整逻辑梳理源码安装核心逻辑装依赖 → 下源码 → 解压 → configure 检测环境定义路径 → make 编译 → make install 安装环境变量作用简化命令任意目录直接输入 nginxnginx -s 信号控制进程启停、重载配置systemd 服务作用统一用 systemctl 管理支持开机自启、状态查看企业标准运维方式源码安装对比 yum高度自定义版本自由目录统一适合生产环境搭建内网 yum 仓库、自定义 web 服务。YUM 自建本地网络仓库实验完整讲解实验环境CentOS7 整体实验目标自己搭建一台 YUM 软件源服务器局域网内其他 Linux 客户端可以通过 HTTP 网络从你的服务器下载安装软件不需要外网互联网。实验核心作用内网环境无互联网场景服务器不能上外网搭建内网 yum 源局域网机器安装软件不用外网。企业机房经常这么做。自定义软件仓库可以统一存放自己常用软件包。理解 yum 工作原理yum 不是直接下载 rpm先读取 repomd.xml 索引获取软件依赖关系再下载 rpm 包。整体四大步骤总思路准备 rpm 软件包把需要的软件 rpm 安装包全部下载到服务器createrepo 生成 YUM 仓库索引repomd.xmlYum 靠这个索引知道仓库里有哪些包、依赖关系是什么。你刚才报错Damaged repomd.xml就是这个索引文件损坏 / 缺失用 Nginx 把目录发布成网页让客户端能用 http 访问到 rpm 包和索引文件客户端写 repo 文件指向自建源yum 安装测试通俗类比 yum 仓库 网上软件商店 rpm 包 软件安装包 repomd.xml 商店商品目录清单 nginx 把商店对外开放 客户端 tools.repo 告诉 Linux软件商店地址在哪里。每一条命令干什么 为什么这么写第一部分服务端操作server 机器搭建 yum 源1. 准备软件包#创建rpms文件夹用来临时存放下载的rpm包[rootserver ~]# mkdir rpms#进入这个文件夹后面下载的包全部存这里[rootserver ~]# cd rpmsmkdir rpms创建空文件夹专门用来存放 rpm 包方便管理cd rpms切换工作目录让下载命令把包下载到这个文件夹而不是 root 家目录#下载软件包以及依赖的软件包[rootserver rpms]# yum install --downloadonly --downloaddir . vim open-vm-tools vsftpd lrzsz bash-completion nginx httpd mariadb-server用ls 查看已安装的软件包参数详解yum install本来是安装软件--downloadonly只下载不要安装软件非常关键我们只想拿到 rpm 安装包不把软件装到源服务器上--downloaddir ..代表当前目录下载的 rpm 全部保存到当前 rpms 文件夹后面一长串软件名就是我们打算放到自建源里面给客户端安装的软件⚠️注意这条命令执行成功前提server 机器本身要有外网可用 yum 源才能把 rpm 包下载下来。# 创建网页发布目录[rootserver ~]# mkdir /usr/local/nginx/html/tools#把下载好全部rpm包移动到网页目录下Packages文件夹[rootserver ~]# mv rpms /usr/local/nginx/html/tools/Packagesmkdir /usr/local/nginx/html/tools/usr/local/nginx/html/是源码安装 nginx 的网页根目录浏览器访问 nginx读取的全部文件都放在这里。我们新建 tools 子目录专门放 yum 仓库。mv rpms /usr/local/nginx/html/tools/Packages把刚刚下载 rpm 包的 rpms 文件夹移动并重命名为Packages。yum 仓库约定俗成 rpm 包放在 Packages 目录。现在路径/usr/local/nginx/html/tools/Packages/xxx.rpm2. 创建 yum 仓库索引#安装createrepo工具[rootserver ~]# yum install -y createrepocreaterepo是专门用来生成 yum 仓库元数据索引的工具CentOS 系统默认没有安装必须手动装。# 创建仓库索引信息[rootserver ~]# 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 访问仓库[rootserver ~]# vim /usr/local/nginx/conf/nginx.conf# 在http块中新增一行autoindex on;http{autoindex on;.....}vim编辑 nginx 主配置文件autoindex on;默认 nginx 访问一个目录如果下面没有 index.html直接报 403 禁止访问。autoindex on开启目录浏览功能浏览器访问http://server.jhl.cloud/tools/nginx 展示目录里面所有文件列表客户端 yum 才能下载 rpm 包和索引文件。❗不要写在 server {} 块外面示例写 http 全局块所有站点全部开启目录浏览。#重载nginx配置[rootserver ~]# systemctl reload nginxreload平滑加载配置不停止已经运行 nginx 进程。修改 nginx.conf 后必须 reload 配置才能生效。如果写restart nginx会直接停止 web 服务业务中断实验优先 reload。✅到此服务端全部做完现在浏览器访问http://server.laoma.cloud/tools/应该可以看到网页列出 repodata 文件夹、Packages 文件夹。第二部分客户端操作client 机器使用自建 yum 源客户端配置验证#备份原有仓库[rootclient ~]# mkdir /etc/yum.repos.d/old[rootclient ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/old/etc/yum.repos.d/系统所有 yum 仓库配置文件全部放在这个目录后缀必须是.repomkdir old创建备份文件夹mv *.repo old把系统原来所有 repo 源文件移动备份。实验目的把外网源全部移走强制客户端只使用我们自己搭建的自建 yum 源排除其他源干扰做纯净测试。 如果不移动旧源yum 会同时读取多个源分不清软件来自哪个仓库。#快速写入tools.repo仓库配置文件[rootclient ~]# cat EOF /etc/yum.repos.d/tools.repo[tools]namecentos7 tools from server.jiang.cloudbaseurlhttp://server.jiang.cloud/tools/enabled1gpgcheck0EOFcat EOF 文件名shell Here‑Doc 语法把两行 EOF 中间内容直接写入文件不用 vim 手动敲实验脚本经常用。repo 每一行详细解释非常重要[tools]#仓库ID名字随便起唯一标识符不能有空格namecentos7 tools from server.jiang.cloud#仓库描述名字给人看随便写baseurlhttp://server.jiang.cloud/tools/#【最重要】yum仓库根地址指向服务端nginx发布的仓库地址enabled1#1启用这个源0关闭gpgcheck0#0关闭rpm数字签名校验自建仓库没有数字签名必须关闭否则yum报错注意server.laoma.cloud需要做域名解析要么修改客户端/etc/hosts把域名指向 server 服务器 IP否则域名无法解析。也可以直接写 IP 地址baseurlhttp://192.168.x.x/tools/[rootclient ~]# ls /etc/yum.repos.d/old tools.repo查看目录确认现在只有 tools.repo 是激活的源其他 repo 全部移动到 old 备份文件夹。#测试安装软件[rootclient ~]# yum install -y httpdyum 读取tools.repo里面 baseurl访问 server 服务器repomd.xml索引查找 httpd 软件包下载 rpm 并且自动处理依赖完成安装。❗高频踩坑点服务端执行createrepo失败没有生成 repodata 文件夹客户端直接报 xml 损坏nginx 没有配置autoindex on访问目录 403yum 访问仓库失败baseurl 写错地址末尾/不能丢新增 rpm 包忘记重新执行 createrepo客户端看不到新增软件客户端没有把旧 repo 移走多个源混淆域名无法解析要么改 hostsbaseurl 直接写服务器 IP防火墙server 机器防火墙放行 80 端口否则客户端访问不了 nginx 网页排查思路 客户端报错 damaged repomd.xml在客户端浏览器访问 baseurl 地址看能不能打开网页能不能访问到repodata/repomd.xml如果网页打不开nginx 配置、防火墙、域名解析问题如果网页打开但是没有 repomd.xml →服务端没有执行 createrepo同步仓库# 将仓库中软件包和元数据全部同步到本地[rootclient ~]# reposync --repoidtools[rootclient ~]# createrepo tools[rootclient ~]# ls tools/Packages repodata参考yum-REPOSYNC(8)。