CentOS 7 部署 Apache 的完整实践:systemd、firewalld 与 SELinux 三重协同

1. 项目概述:为什么在 CentOS 7 上部署 Apache 不是“装个软件”那么简单

Apache httpd 是全球部署最广的 Web 服务器之一,而 CentOS 7 作为企业级 Linux 发行版的长期主力,至今仍在大量生产环境、教学实验和私有云平台中稳定运行。但“Установка веб-сервера Apache в CentOS 7”这个俄语标题背后,远不止一条 yum install httpd 命令能概括——它是一整套系统级服务治理的起点。我带过十几期运维实训班,90% 的新手第一次敲完 systemctl start httpd 后,打开浏览器看到 “It works!” 就以为大功告成,结果第二天发现服务莫名宕机、防火墙拦死 80 端口、SELinux 报错拒绝访问网页目录、甚至修改了 /etc/httpd/conf/httpd.conf 却完全不生效……这些都不是故障,而是 CentOS 7 特有机制在“打招呼”。CentOS 7 的核心逻辑是: 一切服务必须被 systemd 管理、一切网络访问必须经 firewalld 过滤、一切文件访问必须通过 SELinux 策略授权 。这三道关卡,缺一不可,且彼此耦合。比如你用 vi 改了配置, systemctl reload httpd 没反应?大概率是 SELinux 把新配置文件标记成了 unconfined_u:object_r:default_t:s0 ,而 httpd 进程只认 httpd_config_t 类型;又比如你 firewall-cmd --permanent --add-port=80/tcp 后忘了 --reload ,那外部请求连防火墙都进不来,更别说 Apache 了。所以这不是“安装”,而是“构建一个受控的 HTTP 服务执行环境”。它适合三类人:刚从 Windows 转 Linux 的系统管理员、需要搭建静态官网或内部文档站的开发工程师、以及正在备考 RHCSA/RHCE 的认证考生。如果你只是想跑个 PHP 页面,那后续还得叠加 PHP-FPM 和 mod_php 模块;如果要承载高并发,就得调优 mpm_prefork 或切换 mpm_event ;如果要配 HTTPS,OpenSSL、证书链、HTTP/2 协议栈又是一整套延伸动作。但所有这一切,都始于今天这个看似简单的安装动作——它是整个 Web 服务生态的地基,地基没打牢,上层建筑再漂亮也是危房。

2. 整体设计思路与方案选型:为什么坚持用 yum + 官方仓库,而不是源码编译或第三方包

在动手之前,必须明确一个原则: 在 CentOS 7 生产环境中,优先使用 yum 从官方 base 和 updates 仓库安装 httpd,而非下载源码编译或引入 EPEL 以外的第三方 RPM 包 。这个选择不是偷懒,而是基于四个硬性约束的综合权衡。

第一是 安全合规性 。Red Hat 对 CentOS 7 的 httpd 包(即 httpd-2.4.6 主版本)进行了长达数年的安全补丁维护,所有 CVE 修复都打包进 httpd RPM 的小版本升级中(如 httpd-2.4.6-97.el7.centos )。你用 yum update httpd 一条命令就能同步所有已知漏洞修复,而源码编译的版本一旦发布就冻结,后续得自己盯 CVE 公告、下载补丁、重新编译,运维成本指数级上升。我曾接手过一个金融客户环境,他们用源码编译的 Apache 2.4.25,结果 OpenSSL 的 Heartbleed 漏洞爆发后,运维团队花了三天才确认补丁兼容性并完成全集群更新,而同期用 yum 安装的客户, yum update 后重启服务,30 分钟内全部闭环。

第二是 依赖管理可靠性 httpd 包在官方仓库中明确定义了 Requires: apr, apr-util, pcre, openssl-libs, systemd 等 17 个核心依赖。 yum 会自动解析、下载、安装并验证这些依赖的 ABI 兼容性。而手动编译时,你得自己 ./configure --with-apr=/usr/bin/apr-1-config --with-ssl=/usr/lib64/openssl ,稍有路径偏差,启动时就会报 undefined symbol: apr_socket_timeout_set 这类链接错误。更麻烦的是,CentOS 7 的 apr-1.4.8 apr-util-1.5.2 是深度定制过的,它们的内存池行为与上游主干有细微差异,官方 httpd RPM 正是针对这些差异做了适配。

第三是 服务集成度 yum install httpd 后, /usr/lib/systemd/system/httpd.service 文件会自动注册到 systemd,它内置了 Type=notify Restart=on-failure LimitNOFILE=65536 等关键参数。你执行 systemctl enable httpd ,它会在 /etc/systemd/system/multi-user.target.wants/ 下创建软链接;执行 systemctl status httpd ,能看到精确到毫秒的启动耗时、内存占用、主进程 PID 及其子进程树。而源码安装的 httpd,你得自己写 service 文件,漏掉 KillMode=mixed 这一行,服务重启时旧子进程就可能变成僵尸进程。

第四是 配置文件标准化 。官方 RPM 将主配置拆分为 /etc/httpd/conf/httpd.conf (主入口)、 /etc/httpd/conf.modules.d/*.conf (模块加载)、 /etc/httpd/conf.d/*.conf (站点配置),这种分层结构被所有 RHEL/CentOS 文档、Ansible 角色、Puppet 模块所遵循。你用 rpm -V httpd 还能校验配置文件是否被意外篡改。反观某些第三方包,把所有配置塞进一个 httpd.conf ,导致 Include conf.d/*.conf 失效,后续加虚拟主机时根本找不到入口。

当然,也有例外场景必须源码编译:比如你需要启用 mod_http2 (CentOS 7 默认 httpd 2.4.6 不支持 HTTP/2),或者要打上某个未合并进主线的性能补丁。但那是进阶需求,对绝大多数用户,“ yum install httpd ” 就是最优解。至于热词里提到的 “apache kudu 集成 impala”,那是大数据分析栈的组件互联,和 Web 服务器部署属于不同技术栈,本文不展开——就像你不会在安装 MySQL 时去研究 Spark 如何读取它的 binlog。

3. 核心细节解析与实操要点:从安装到可访问的七步闭环

部署 Apache 的本质,是让 httpd 进程以非特权用户身份,安全地监听 80 端口,并将请求映射到磁盘上的 HTML 文件。这七步环环相扣,任何一步缺失都会导致服务不可用。下面我按真实操作顺序,逐条拆解每个环节的原理、命令和易错点。

3.1 第一步:确认系统状态与基础环境

在敲任何安装命令前,先做三件事:

  1. 检查系统版本与内核

    cat /etc/redhat-release
    # 输出应为:CentOS Linux release 7.x.x
    uname -r
    # 输出应为:3.10.0-xxx.el7.x86_64(确保是 3.10 内核,这是 CentOS 7 的标志)
    

    如果看到 CentOS Stream 7 AlmaLinux 7 ,说明系统已变种,部分 SELinux 策略可能不同,需额外验证。

  2. 关闭 NetworkManager 并启用传统 network 服务(可选但推荐)
    CentOS 7 默认启用 NetworkManager,它与传统 network 服务冲突。Web 服务器对网络稳定性要求极高,建议停用 NM:

    systemctl stop NetworkManager
    systemctl disable NetworkManager
    systemctl start network
    systemctl enable network
    

    提示:此操作仅影响网络接口管理,不影响 Apache 本身。但若你后续要用 nmcli 管理网卡,则跳过此步。

  3. 同步系统时间

    timedatectl set-ntp true
    systemctl restart chronyd
    

    时间不同步会导致 SSL 证书验证失败、日志时间错乱,是很多 HTTPS 配置问题的隐藏元凶。

3.2 第二步:执行 yum 安装并验证包完整性

yum install -y httpd

这条命令实际做了五件事:

  • 下载 httpd-2.4.6-97.el7.centos.x86_64.rpm 及其所有依赖 RPM;
  • 校验每个 RPM 的 GPG 签名( /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 );
  • 解压 RPM 到 /usr/sbin/httpd /etc/httpd/ /var/www/ 等标准路径;
  • 运行 %post 脚本,创建 apache 用户、设置 /var/log/httpd/ 权限;
  • 自动创建 /etc/httpd/conf.d/welcome.conf ,这是那个著名的 “It works!” 页面来源。

安装完成后,立即验证:

rpm -qi httpd
# 查看安装时间、版本、签名信息
rpm -V httpd
# 输出为空表示所有文件未被篡改;若有输出如 "S.5....T /etc/httpd/conf/httpd.conf",说明配置文件被修改过

3.3 第三步:理解并初始化 httpd 服务单元

httpd 的 systemd 服务文件位于 /usr/lib/systemd/system/httpd.service ,其关键内容如下:

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
Restart=on-failure
RestartSec=42s
LimitNOFILE=65536

重点看 Type=notify :这意味着 httpd 主进程启动后,会向 systemd 发送 READY=1 信号,告知“我已准备就绪”。如果 httpd 因配置错误无法启动,systemd 会收到 NOTIFY=1 但无 READY ,从而判定启动失败。这就是为什么 systemctl start httpd systemctl status httpd 显示 failed ,而不是卡在 activating

初始化服务:

systemctl daemon-reload  # 重载 unit 文件(虽刚装完通常不需要,但养成习惯)
systemctl enable httpd     # 设置开机自启,创建软链接
systemctl start httpd      # 启动服务

3.4 第四步:防火墙放行 80 端口(firewalld)

CentOS 7 默认启用 firewalld,它比 iptables 更面向服务。直接开放端口是下策,正确做法是启用 http 服务预设:

firewall-cmd --permanent --add-service=http
firewall-cmd --reload

这两条命令等价于:

  • /etc/firewalld/zones/public.xml 中添加 <service name="http"/>
  • http 服务定义在 /usr/lib/firewalld/services/http.xml ,它实际开放 tcp:80
  • --reload 会刷新内核 netfilter 规则,无需重启 firewalld 服务。

注意: firewall-cmd --list-all 必须显示 services: dhcpv6-client http 才算成功。如果只看到 dhcpv6-client ,说明 --reload 没执行,或者你用了 --add-port 而非 --add-service ,后者需要手动指定协议。

3.5 第五步:SELinux 策略适配(最关键的一步)

这是 CentOS 7 Apache 部署中 70% 故障的根源。默认情况下,SELinux 将 /var/www/html/ 目录标记为 httpd_sys_content_t ,允许 httpd 读取;但如果你把网站文件放到 /home/user/myweb/ ,它的类型是 user_home_t ,httpd 进程(域为 httpd_t )默认无权访问。

验证当前上下文:

ls -Z /var/www/html/
# 应输出:unconfined_u:object_r:httpd_sys_content_t:s0 index.html
ps -Z | grep httpd
# 应输出:system_u:system_r:httpd_t:s0 ... /usr/sbin/httpd

若需自定义网站根目录(如 /opt/myapp ),必须修改其 SELinux 类型:

mkdir -p /opt/myapp
chown -R apache:apache /opt/myapp
semanage fcontext -a -t httpd_sys_content_t "/opt/myapp(/.*)?"
restorecon -Rv /opt/myapp

semanage fcontext 是永久规则, restorecon 是立即生效。漏掉任一,重启后策略丢失。

3.6 第六步:测试本地访问与日志分析

启动服务后,先在本机测试:

curl -I http://localhost
# 应返回 HTTP/1.1 200 OK
curl http://localhost
# 应返回欢迎页 HTML 源码

同时监控日志:

tail -f /var/log/httpd/access_log /var/log/httpd/error_log
# 开另一个终端执行 curl,观察 access_log 是否有记录,error_log 是否有报错

常见 error_log 错误:

  • Permission denied: AH00035: access to / denied (13) → SELinux 拒绝,用 ausearch -m avc -ts recent | audit2why 分析;
  • Could not open configuration file → 配置文件语法错误,用 httpd -t 检查;
  • Address already in use: AH00072: make_sock: could not bind to address [::]:80 → 端口被占用, netstat -tuln | grep :80 查进程。

3.7 第七步:配置文件结构与最小化修改原则

官方 httpd.conf 有 300+ 行,但 90% 是注释。真正需要关注的只有 5 个指令:

ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
Include conf.d/*.conf
  • ServerRoot 是配置根目录,所有相对路径都以此为基准;
  • Listen 80 可改为 Listen 192.168.1.100:80 绑定特定 IP;
  • Include 指令实现了模块化, conf.modules.d/ 下的 00-base.conf 加载核心模块, conf.d/ 下的 autoindex.conf 控制目录列表功能。

最小化修改原则 :永远不要直接编辑 httpd.conf 。新增虚拟主机,创建 /etc/httpd/conf.d/myapp.conf ;启用 PHP,创建 /etc/httpd/conf.d/php.conf 。这样便于版本控制、回滚和 Ansible 管理。

4. 实操过程与核心环节实现:从零开始搭建一个可外网访问的静态网站

现在我们把前面七步整合成一个完整、可复现的实操流程。目标:在一台 VMware Workstation Pro 中安装的 CentOS 7 Minimal 系统上,部署一个名为 myblog 的静态网站,可通过局域网内其他电脑(如 Windows 主机)访问 http://192.168.1.100

4.1 环境准备:VMware 中的 CentOS 7 Minimal 配置要点

VMware Workstation Pro 安装 CentOS 7 Minimal 时,务必勾选 “Use network address translation (NAT)” 网络模式,并在 VMware 的 “Edit > Virtual Network Editor” 中确认 NAT 设置:

  • 子网 IP: 192.168.1.0
  • 网关 IP: 192.168.1.2 (这是 VMware 虚拟网关)
  • DHCP 起始 IP: 192.168.1.128

安装完成后,在 CentOS 中配置静态 IP:

cat > /etc/sysconfig/network-scripts/ifcfg-ens33 << 'EOF'
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=xxxxxx
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.2
DNS1=114.114.114.114
EOF

systemctl restart network

注意: ifcfg-ens33 中的设备名 ens33 需根据 ip link show 输出的实际名称调整(可能是 eth0 enp0s3 )。Minimal 安装默认不启动 NetworkManager,所以用 network 服务。

4.2 创建网站内容与权限设置

# 创建网站根目录,使用标准路径避免 SELinux 问题
mkdir -p /var/www/myblog
# 创建一个极简首页
cat > /var/www/myblog/index.html << 'EOF'
<!DOCTYPE html>
<html>
<head><title>My Blog</title></head>
<body>
<h1>Welcome to My Blog!</h1>
<p>This site is running on Apache httpd on CentOS 7.</p>
</body>
</html>
EOF
# 设置所有权,apache 用户必须能读取
chown -R apache:apache /var/www/myblog
# 设置权限:目录 755,文件 644
find /var/www/myblog -type d -exec chmod 755 {} \;
find /var/www/myblog -type f -exec chmod 644 {} \;

4.3 编写虚拟主机配置文件

创建 /etc/httpd/conf.d/myblog.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/var/www/myblog"
    ServerName myblog.local
    ErrorLog "/var/log/httpd/myblog_error.log"
    CustomLog "/var/log/httpd/myblog_access.log" combined

    <Directory "/var/www/myblog">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

关键点解析:

  • DocumentRoot 必须与物理路径完全一致,末尾不加 /
  • <Directory> 块中的 Require all granted 是 Apache 2.4 的新语法,替代了 2.2 的 Order allow,deny + Allow from all
  • Options Indexes 允许目录列表, FollowSymLinks 允许跟随符号链接(如需);
  • AllowOverride None 禁用 .htaccess ,提升性能(除非你真需要它)。

4.4 验证配置并重启服务

# 语法检查,这是上线前必做步骤
httpd -t
# 输出应为:Syntax OK

# 检查是否监听 80 端口
ss -tuln | grep :80
# 应输出:tcp LISTEN 0 128 *:80 *:* users:(("httpd",pid=1234,fd=4),("httpd",pid=1235,fd=4))

# 重启服务,使新配置生效
systemctl restart httpd

4.5 从 Windows 主机访问测试

在 VMware 宿主机(Windows)上:

  1. 打开命令提示符, ping 192.168.1.100 确认网络连通;
  2. tracert 192.168.1.100 确认走的是 VMware NAT 网关;
  3. 浏览器访问 http://192.168.1.100 ,应看到 “Welcome to My Blog!” 页面;
  4. 查看 CentOS 的 /var/log/httpd/myblog_access.log ,应有来自 Windows IP 的访问记录。

如果失败,按以下顺序排查:

  • Windows 能 ping 通,但浏览器打不开 → 检查 CentOS 的 firewall-cmd --list-all
  • Windows ping 不通 → 检查 VMware 虚拟网络设置和 CentOS 的 ip addr show
  • CentOS 本机 curl http://localhost 成功,但 Windows 打不开 → 检查 firewall-cmd ss -tuln 是否监听 *:80 (而非 127.0.0.1:80 )。

4.6 日志轮转与基础安全加固

生产环境必须配置日志轮转,防止 /var/log/httpd/ 帐满:

# 编辑 logrotate 配置
cat >> /etc/logrotate.d/httpd << 'EOF'

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    compress
    weekly
    create 0644 apache apache
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}
EOF

每周轮转一次,压缩旧日志, postrotate reload 通知 httpd 使用新日志文件。

基础安全加固(非 HTTPS 场景):

# 隐藏 Apache 版本号,减少信息泄露
echo "ServerTokens Prod" >> /etc/httpd/conf/httpd.conf
echo "ServerSignature Off" >> /etc/httpd/conf/httpd.conf
# 禁用危险的 HTTP 方法
echo "<LimitExcept GET POST HEAD>" >> /etc/httpd/conf.d/security.conf
echo "    Deny from all" >> /etc/httpd/conf.d/security.conf
echo "</LimitExcept>" >> /etc/httpd/conf.d/security.conf
systemctl reload httpd

5. 常见问题与排查技巧实录:那些年踩过的坑和独家经验

在 CentOS 7 上部署 Apache,问题往往不是“不会”,而是“不知道哪里错了”。以下是我在上百次部署中总结的高频问题、排查路径和独家技巧,按发生概率排序。

5.1 问题速查表:症状、原因、解决命令

症状 最可能原因 一键诊断命令 解决方案
systemctl start httpd status 显示 failed journalctl -u httpd 无有效日志 httpd 进程启动即退出,systemd 未收到 READY 信号 strace -f -e trace=connect,openat,write /usr/sbin/httpd -DFOREGROUND 2>&1 | head -50 检查 httpd.conf 语法( httpd -t ),或 SELinux 拒绝( ausearch -m avc -ts recent | audit2why
curl http://localhost 返回 Connection refused httpd 未监听 80 端口,或监听了 127.0.0.1:80 而非 *:80 ss -tuln | grep :80 检查 Listen 指令是否为 Listen 80 (非 Listen 127.0.0.1:80 ),并确认 firewall-cmd --list-all http 服务
页面显示 403 Forbidden SELinux 拒绝访问文件,或目录无执行权限 ls -Z /var/www/html/ ps -Z | grep httpd chcon -t httpd_sys_content_t /var/www/html/index.html setsebool -P httpd_read_user_content on (如需读取家目录)
修改 index.html 后刷新页面仍是旧内容 浏览器缓存,或 Apache 启用了 mod_cache curl -I http://localhost 查看 Cache-Control <Directory> 块中添加 Header set Cache-Control "no-cache, no-store, must-revalidate" 并加载 mod_headers
httpd -t 报错 Invalid command 'SSLEngine' 启用了 SSL 指令但未加载 mod_ssl 模块 httpd -M | grep ssl yum install mod_ssl ,然后 systemctl restart httpd

5.2 独家避坑技巧:教科书里不会写的实战经验

技巧一:用 httpd -S 代替肉眼检查虚拟主机
当配置了多个 <VirtualHost> httpd -S 会输出所有虚拟主机的解析结果,包括 ServerName DocumentRoot 和匹配顺序。它能立刻告诉你:

  • 是否有重复的 ServerName
  • *:80 192.168.1.100:80 哪个优先级更高;
  • DocumentRoot 路径是否存在且可读。
    执行 httpd -S 后,如果看到 Warning: DocumentRoot [/var/www/myblog] does not exist ,说明路径拼写错误,比翻 300 行配置高效十倍。

技巧二:SELinux 故障的“三步定位法”

  1. ausearch -m avc -ts recent :抓取最近 10 分钟的 SELinux 拒绝事件;
  2. audit2why < /var/log/audit/audit.log \| grep httpd :将原始 AVC 拒绝转换为人类可读的建议;
  3. setsebool -P httpd_can_network_connect on :如果审计日志显示 httpd_t 试图连接网络(如反向代理),就开启此布尔值。

注意: setsebool -P -P 参数表示永久生效,否则重启后失效。这是很多教程遗漏的关键点。

技巧三:防火墙调试的“双通道验证”
很多人只在 CentOS 里 firewall-cmd --list-all ,却忘了 VMware 宿主机的 Windows 防火墙也可能拦截。正确做法是:

  • 在 CentOS 中 tcpdump -i any port 80 ,看是否有来自 Windows 的 SYN 包;
  • 在 Windows 中 Wireshark 抓包,看是否发出 SYN,以及是否收到 SYN-ACK。
    如果 CentOS 有 SYN 但无回复,是 firewalld 问题;如果 Windows 根本没发 SYN,是 Windows 防火墙或浏览器代理问题。

技巧四:配置文件语法错误的“二分法定位”
httpd -t 报错但不指明行号(如 httpd: Syntax error on line 123 of /etc/httpd/conf/httpd.conf ),不要一行行看。用 sed -n '120,130p' /etc/httpd/conf/httpd.conf 打印出错行附近代码,重点检查:

  • 引号是否成对(中文引号 “” 是最大杀手);
  • <Directory> 是否有对应的 </Directory>
  • LoadModule 路径是否正确( /usr/lib64/httpd/modules/mod_ssl.so 而非 /usr/lib/httpd/modules/ )。

技巧五:服务启动慢的“超时延长术”
有时 systemctl start httpd 卡住 90 秒才报 timeout ,这是因为 systemd 默认 TimeoutStartSec=90s 。临时解决:

systemctl edit httpd
# 输入:
[Service]
TimeoutStartSec=300
# 保存后执行
systemctl daemon-reload
systemctl restart httpd

这能让你有足够时间在 journalctl -u httpd -f 中观察启动过程,找到卡点(如 DNS 解析超时、挂载 NFS 失败)。

5.3 关于热词中几个高频误区的澄清

  • “centos 7 minimal 下载” :Minimal ISO 是官方精简版,不含 GUI 和多余软件包, 正适合部署 Web 服务器 。它内存占用低、攻击面小、启动快。所谓“功能不全”是误解—— yum install httpd 所需依赖,Minimal ISO 全部包含。

  • “apache shiro框架漏洞靶场” :Shiro 是 Java 安全框架,与 Apache httpd 无直接关系。靶场是用于渗透测试的故意留洞环境, 绝不能在生产 Apache 上部署 Shiro 靶场 。二者属于不同层级:httpd 是网络层服务器,Shiro 是应用层框架。

  • “abuntu 中 apache” :Ubuntu 的 Apache 包叫 apache2 ,配置路径是 /etc/apache2/ ,与 CentOS 的 /etc/httpd/ 完全不同。跨发行版复制配置必然失败。记住: RHEL/CentOS 用 httpd ,Debian/Ubuntu 用 apache2 ,这是铁律。

  • “#加载php模块loadmodule php_module ……” :这段配置是 Windows 下 Apache 的典型写法,路径含 d:\ .dll CentOS 7 是 Linux,必须用 .so 动态库和 /usr/lib64/httpd/modules/ 路径 。正确写法是 LoadModule php_module modules/libphp.so ,且需先 yum install php php-common

最后分享一个小技巧:每次成功部署后,运行 rpm -qa \| grep httpd 记录下当前版本号(如 httpd-2.4.6-97.el7.centos ),并把它写进你的部署文档。当某天客户问“你们用的 Apache 有无 XX 漏洞”,你只需查 Red Hat CVE 数据库,输入这个精确版本号,就能得到权威答案。这才是专业运维该有的样子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值