RHEL9 系统中 Apache HTTP 服务器入门实战指南

写在前面

🚀 RHEL9 Apache 入门实战

从零开始搭建企业级 Web 服务器

如果你是第一次接触 Web 服务器,不用担心!这篇文章会像教朋友一样,一步一步带你完成 Apache 的安装和配置。每一步都有详细说明,遇到问题也有解决方案。

你需要准备的东西:

  • 一台安装了 RHEL9(或 Rocky Linux 9、AlmaLinux 9)的服务器
  • 有 root 权限(或者能用 sudo)
  • 能联网(需要下载软件包)

学完你能做到:

  • 搭建一个可以访问的网站
  • 配置多个网站在同一台服务器上
  • 让网站支持 HTTPS 安全访问
  • 知道出了问题怎么排查

一、什么是 Apache?为什么选它?

Apache 就像是一个"网站管家",当有人在浏览器输入你的网址时,Apache 会把网页内容发送给他们。

为什么企业都喜欢用 Apache?

  • 稳定可靠:运行 20+ 年的老牌软件,久经考验
  • 免费开源:不用花一分钱
  • 功能强大:支持虚拟主机、HTTPS、反向代理等
  • 文档齐全:遇到问题很容易找到解决方案

RHEL9 是什么?
RHEL9(Red Hat Enterprise Linux 9)是红帽公司推出的企业级 Linux 系统,Rocky Linux 9 和 AlmaLinux 9 都是它的免费替代版本,操作方法完全一样。

  • 有 root 权限(或者能用 sudo)
  • 能联网(需要下载软件包)

学完你能做到:

  • 搭建一个可以访问的网站
  • 配置多个网站在同一台服务器上
  • 让网站支持 HTTPS 安全访问
  • 知道出了问题怎么排查

一、什么是 Apache?为什么选它?

Apache 就像是一个"网站管家",当有人在浏览器输入你的网址时,Apache 会把网页内容发送给他们。

为什么企业都喜欢用 Apache?

  • 稳定可靠:运行 20+ 年的老牌软件,久经考验
  • 免费开源:不用花一分钱
  • 功能强大:支持虚拟主机、HTTPS、反向代理等
  • 文档齐全:遇到问题很容易找到解决方案

RHEL9 是什么?
RHEL9(Red Hat Enterprise Linux 9)是红帽公司推出的企业级 Linux 系统,Rocky Linux 9 和 AlmaLinux 9 都是它的免费替代版本,操作方法完全一样。


二、安装 Apache

2.1 先检查系统版本

打开终端,输入这个命令:

cat /etc/redhat-release

你会看到类似这样的输出:

Red Hat Enterprise Linux release 9.3 (Plow)

💡 小提示:如果你看到的是 Rocky Linux 或 AlmaLinux,完全没问题,步骤一模一样!

2.2 安装 httpd 软件包

在 RHEL9 中,Apache 的软件包名字叫 httpd。用这个命令安装:

# 使用 dnf 包管理器安装
sudo dnf install -y httpd

命令解释:

  • sudo:用管理员权限运行
  • dnf:RHEL9 的包管理器(类似手机的应用商店)
  • install:安装
  • -y:自动回答"是",不用手动确认
  • httpd:Apache 的软件包名

安装完成后,检查版本:

httpd -v

你会看到:

Server version: Apache/2.4.xx (Red Hat Enterprise Linux)

✅ 恭喜!Apache 已经安装好了!

2.3 启动 Apache 服务

安装好了还不够,要"启动"它才能工作:

# 启动 Apache 服务
sudo systemctl start httpd

# 设置开机自动启动
sudo systemctl enable httpd

# 查看服务状态
sudo systemctl status httpd

你会看到这样的输出:

● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: active (running) since Thu 2026-02-27 15:00:00 CST; 10s ago

重点看这里:

  • Active: active (running) - 说明服务正在运行 ✅
  • enabled - 说明开机后会自动启动 ✅

💡 如果看到 inactive (dead)failed,往下看"常见问题"部分。


三、配置防火墙(让外网能访问)

3.1 为什么需要配置防火墙?

想象你的服务器是一栋楼,防火墙就是门卫。默认情况下,门卫会拦住所有陌生人。你需要告诉门卫:"HTTP(80端口)和 HTTPS(443端口)的客人可以进来。"

3.2 开放 HTTP 和 HTTPS 端口

# 检查防火墙状态
sudo firewall-cmd --state
# 应该看到:running

# 开放 HTTP(网站默认端口)
sudo firewall-cmd --permanent --add-service=http

# 开放 HTTPS(安全端口,后面会用到)
sudo firewall-cmd --permanent --add-service=https

# 重载防火墙配置(让设置生效)
sudo firewall-cmd --reload

# 验证规则是否生效
sudo firewall-cmd --list-services

你会看到:

ssh http https

命令解释:

  • --permanent:永久生效,重启后不会丢
  • --add-service=http:添加 HTTP 服务规则
  • --reload:重新加载配置

✅ 现在外网可以访问你的网站了!


四、创建你的第一个网页

4.1 Apache 的网站目录

Apache 默认把网站文件放在 /var/www/html/ 目录下。这就像你的"网站仓库",所有网页都要放这里。

# 查看 Apache 的默认目录
ls -la /var/www/html/

💡 刚安装完,这个目录是空的,没关系!

4.2 创建一个简单的测试页面

# 创建首页文件
echo "

我的第一个网站!

" | sudo tee /var/www/html/index.html # 设置正确的权限(重要!) sudo chown apache:apache /var/www/html/index.html sudo chmod 644 /var/www/html/index.html

命令解释:

  • chown apache:apache:把文件所有者改为 apache 用户
  • chmod 644:设置文件权限(所有者可读写,其他人只读)

4.3 测试访问

现在打开浏览器,输入你的服务器 IP 地址:

http://你的服务器IP/

你会看到:

我的第一个网站!

✅ 恭喜!你的网站已经上线了!

💡 如果看不到这个页面,检查:

  1. 防火墙是否开放了 80 端口
  2. Apache 服务是否在运行
  3. 云服务商的安全组是否开放了 80 端口

五、配置 SELinux(企业级安全)

5.1 什么是 SELinux?

SELinux 是 RHEL9 的安全增强系统,它像一个严格的安检员,会检查每个操作是否合法。

为什么要学 SELinux?

  • 企业环境必须开启 SELinux
  • 配置错误会导致网站无法访问
  • 掌握 SELinux 是运维工程师的必备技能

5.2 检查 SELinux 状态

# 查看 SELinux 是否开启
getenforce

可能的输出:

  • Enforcing:开启状态(推荐)✅
  • Permissive:宽容模式(只记录不阻止)
  • Disabled:关闭状态(不推荐)❌

⚠️ 不要关闭 SELinux!学会正确配置才是正道。

5.3 配置 Apache 的 SELinux 权限

# 查看 Apache 相关的 SELinux 布尔值
getsebool -a | grep httpd

常用设置:

# 允许 Apache 连接网络(反向代理需要)
sudo setsebool -P httpd_can_network_connect 1

# 允许 Apache 发送邮件
sudo setsebool -P httpd_can_sendmail 1

# 允许 Apache 访问用户主目录
sudo setsebool -P httpd_enable_homedirs 1

5.4 设置网站目录的 SELinux 上下文

这是最容易出错的地方!

# 为网站目录设置正确的上下文
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html

命令解释:

  • httpd_sys_content_t:Apache 可以读取的文件类型
  • restorecon:重新应用 SELinux 上下文

💡 记住这个命令,每次创建新网站目录都要执行!

5.5 SELinux 排错技巧

如果网站访问不了,这样查:

# 查看 SELinux 拒绝日志
sudo ausearch -m avc -ts recent | grep httpd

# 如果看到很多拒绝记录,可以用这个工具生成策略
sudo ausearch -c 'httpd' --raw | audit2allow -M my-httpd
sudo semodule -i my-httpd.pp

⚠️ 注意:只在测试环境用 audit2allow,生产环境要分析具体原因。


六、虚拟主机配置(一台服务器托管多个网站)

6.1 什么是虚拟主机?

虚拟主机就像一栋楼里有多个房间,每个房间(网站)都有独立的门牌号(域名),但都共用同一栋楼(服务器)。

应用场景:

  • 公司有多个网站,但只有一台服务器
  • 开发环境和测试环境分开
  • 节省服务器成本

6.2 创建网站目录

假设你要托管 example.com 这个网站:

# 创建网站目录结构
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/example.com/logs

# 创建测试页面
echo "

欢迎访问 example.com

" | sudo tee /var/www/example.com/public_html/index.html # 设置权限 sudo chown -R apache:apache /var/www/example.com sudo chmod -R 755 /var/www/example.com

目录结构说明:

/var/www/example.com/
├── public_html/    # 网站文件目录
└── logs/           # 日志目录

6.3 创建虚拟主机配置文件

# 创建配置文件
sudo vim /etc/httpd/conf.d/example.com.conf

粘贴以下内容:


    # 管理员邮箱
    ServerAdmin webmaster@example.com

    # 网站域名
    ServerName example.com
    ServerAlias www.example.com

    # 网站文件目录
    DocumentRoot /var/www/example.com/public_html

    # 日志配置
    ErrorLog /var/www/example.com/logs/error.log
    CustomLog /var/www/example.com/logs/access.log combined

    # 目录权限配置
    
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    

配置解释:

  • ServerName:主域名
  • ServerAlias:别名(可以多个)
  • DocumentRoot:网站文件位置
  • Options -Indexes:禁止目录列表(安全)
  • AllowOverride All:允许 .htaccess 文件

6.4 测试配置并重启

# 测试配置语法(重要!)
sudo apachectl configtest

看到 Syntax OK 才能继续!

# 重启 Apache
sudo systemctl restart httpd

6.5 配置 SELinux 上下文

这一步不能少,否则网站无法访问!

# 为新网站设置 SELinux 上下文
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com/public_html(/.*)?"
sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/logs(/.*)?"
sudo restorecon -Rv /var/www/example.com

✅ 现在你可以用 example.com 访问这个网站了!

💡 要添加更多网站,重复 6.2-6.5 步骤即可。


七、配置 HTTPS(安全访问)

7.1 为什么需要 HTTPS?

  • 安全:加密传输,防止数据被窃取
  • 信任:浏览器显示小锁图标
  • SEO:搜索引擎更喜欢 HTTPS 网站
  • 必须:很多功能(如 PWA)要求 HTTPS

7.2 安装 SSL 模块

# 安装 mod_ssl
sudo dnf install -y mod_ssl

7.3 生成自签名证书(测试用)

⚠️ 测试环境用自签名证书,生产环境要用正式证书(如 Let's Encrypt)。

# 生成私钥和证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/pki/tls/private/example.com.key \
  -out /etc/pki/tls/certs/example.com.crt

按提示填写信息:

Country Name: CN
State: Beijing
Locality: Beijing
Organization: Example Company
Organizational Unit: IT
Common Name: example.com
Email: webmaster@example.com

💡 Common Name 一定要填你的域名!

7.4 配置 HTTPS 虚拟主机

编辑配置文件:

sudo vim /etc/httpd/conf.d/ssl.conf

找到 `` 部分,修改为:


    ServerName example.com
    DocumentRoot /var/www/example.com/public_html

    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/example.com.crt
    SSLCertificateKeyFile /etc/pki/tls/private/example.com.key

    ErrorLog /var/www/example.com/logs/ssl_error.log
    CustomLog /var/www/example.com/logs/ssl_access.log combined

7.5 重启并测试

# 测试配置
sudo apachectl configtest

# 重启服务
sudo systemctl restart httpd

现在访问:

https://example.com/

💡 浏览器会提示"证书不安全",这是因为自签名证书。生产环境用 Let's Encrypt 就不会有这个提示。

7.6 HTTP 自动跳转到 HTTPS

让用户访问 HTTP 自动跳转到 HTTPS:

sudo vim /etc/httpd/conf.d/example.com.conf

在文件开头添加:


    ServerName example.com
    Redirect permanent / https://example.com/

重启服务:

sudo systemctl restart httpd

✅ 现在访问 http://example.com 会自动跳转到 https://example.com


八、常见问题排查

问题 1:网站打不开(403 Forbidden)

可能原因:

  1. 文件权限不对
  2. SELinux 阻止
  3. Apache 配置限制

排查步骤:

# 1. 检查文件权限
ls -la /var/www/html/

# 2. 检查 SELinux 上下文
ls -laZ /var/www/html/

# 3. 查看 Apache 错误日志
sudo tail -f /var/log/httpd/error_log

解决方法:

# 修复权限
sudo chown -R apache:apache /var/www/html
sudo chmod -R 755 /var/www/html

# 修复 SELinux
sudo restorecon -Rv /var/www/html

问题 2:Apache 服务无法启动

排查步骤:

# 检查配置语法
sudo apachectl configtest

# 查看详细错误
sudo journalctl -xeu httpd

# 检查端口占用
sudo netstat -tlnp | grep :80

常见错误:

  • Syntax error:配置文件写错了
  • Address already in use:80 端口被占用
  • Permission denied:权限不足

问题 3:SELinux 阻止访问

症状:

  • 网站文件存在,但访问 403
  • 日志显示 Permission denied
  • 关闭 SELinux 后正常

正确做法:

# 1. 查看 SELinux 拒绝日志
sudo ausearch -m avc -ts recent | grep httpd

# 2. 查看 Apache 的 SELinux 布尔值
getsebool -a | grep httpd

# 3. 检查文件上下文
ls -laZ /var/www/html/

# 4. 修复上下文
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html

⚠️ 不要简单地 setenforce 0,这是逃避问题!

问题 4:防火墙阻止访问

症状:

  • 本地可以访问(curl localhost
  • 外网无法访问
  • 浏览器一直转圈

排查步骤:

# 查看防火墙规则
sudo firewall-cmd --list-all

# 检查端口是否开放
sudo firewall-cmd --query-service=http

# 查看端口监听
sudo netstat -tlnp | grep :80

解决方法:

# 开放 HTTP
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

💡 云服务器还要检查安全组规则!


九、性能优化建议

9.1 调整 MPM(多进程模块)

RHEL9 的 Apache 默认使用 event MPM,性能更好:

# 查看当前 MPM
sudo apachectl -V | grep MPM

编辑配置:

sudo vim /etc/httpd/conf.modules.d/00-mpm.conf

调整参数:


    ServerLimit             16
    StartServer             2
    MaxRequestWorkers      150
    MinSpareThreads         25
    MaxSpareThreads         75
    ThreadsPerChild         25
    MaxConnectionsPerChild   0

参数说明:

  • MaxRequestWorkers:最大并发连接数
  • ThreadsPerChild:每个进程的线程数
  • ServerLimit:最大进程数

9.2 启用压缩

sudo vim /etc/httpd/conf.d/compression.conf

    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    AddOutputFilterByType DEFLATE text/css text/javascript
    AddOutputFilterByType DEFLATE application/javascript application/json

好处: 减少传输数据量,加快加载速度。

9.3 启用缓存


    CacheQuickHandler off
    CacheLock on
    CacheLockPath /tmp/cachelock
    CacheLockMaxAge 5

十、安全加固

10.1 隐藏版本信息

sudo vim /etc/httpd/conf/httpd.conf

添加:

ServerTokens Prod
ServerSignature Off

效果: HTTP 响应头只显示 Server: Apache,不显示版本号。

10.2 限制请求大小

防止恶意的大文件上传:

LimitRequestBody 10485760
LimitRequestFields 50
LimitRequestFieldSize 8190
LimitRequestLine 8190

10.3 使用 ModSecurity(Web 应用防火墙)

# 安装 ModSecurity
sudo dnf install -y mod_security mod_security_crs

# 启用规则
sudo mv /etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_10_setup.conf.example \
       /etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_10_setup.conf

# 重启服务
sudo systemctl restart httpd

功能: 自动防御 SQL 注入、XSS 等攻击。


十一、实用命令速查表

# ========== 服务管理 ==========
sudo systemctl start httpd      # 启动
sudo systemctl stop httpd       # 停止
sudo systemctl restart httpd    # 重启
sudo systemctl reload httpd     # 优雅重启(不中断连接)
sudo systemctl status httpd     # 查看状态

# ========== 配置测试 ==========
sudo apachectl configtest       # 测试配置语法
sudo apachectl -S               # 查看虚拟主机配置
sudo apachectl -M               # 查看已加载模块
sudo apachectl -V               # 查看编译参数

# ========== 日志查看 ==========
sudo tail -f /var/log/httpd/access_log   # 访问日志
sudo tail -f /var/log/httpd/error_log    # 错误日志

# ========== SELinux ==========
getenforce                     # 查看状态
getsebool -a | grep httpd      # 查看布尔值
sudo restorecon -Rv /var/www   # 恢复上下文

# ========== 防火墙 ==========
sudo firewall-cmd --list-all   # 查看规则
sudo firewall-cmd --reload     # 重载配置

# ========== 性能测试 ==========
ab -n 1000 -c 10 http://localhost/   # 压力测试

十二、总结

恭喜你完成了 Apache 的完整学习!让我们回顾一下学到了什么:

核心知识点

  1. 安装配置 - dnf install、systemctl start/enable
  2. 防火墙 - firewall-cmd 开放端口
  3. SELinux - 上下文配置、布尔值设置
  4. 虚拟主机 - 一台服务器托管多个网站
  5. HTTPS - SSL 证书配置、自动跳转
  6. 性能优化 - MPM 调整、压缩、缓存
  7. 安全加固 - 版本隐藏、ModSecurity

学习建议

  • 多动手:实践是最好的老师
  • 看日志:出问题先看 /var/log/httpd/error_log
  • 别怕错:SELinux 和防火墙确实复杂,慢慢就熟练了
  • 记笔记:把常用命令和踩过的坑记下来

进阶方向

  • Let's Encrypt:免费 SSL 证书
  • 反向代理:配合 Nginx 使用
  • 负载均衡:多服务器集群
  • 容器化:Docker + Kubernetes

参考资源


遇到问题? 欢迎在评论区留言,我会尽力帮你解决!

觉得有用? 点个赞,让更多人看到!

Views: 2