写在前面
🚀 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/
你会看到:
我的第一个网站!
✅ 恭喜!你的网站已经上线了!
💡 如果看不到这个页面,检查:
- 防火墙是否开放了 80 端口
- Apache 服务是否在运行
- 云服务商的安全组是否开放了 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)
可能原因:
- 文件权限不对
- SELinux 阻止
- 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 的完整学习!让我们回顾一下学到了什么:
核心知识点
- 安装配置 - dnf install、systemctl start/enable
- 防火墙 - firewall-cmd 开放端口
- SELinux - 上下文配置、布尔值设置
- 虚拟主机 - 一台服务器托管多个网站
- HTTPS - SSL 证书配置、自动跳转
- 性能优化 - MPM 调整、压缩、缓存
- 安全加固 - 版本隐藏、ModSecurity
学习建议
- 多动手:实践是最好的老师
- 看日志:出问题先看
/var/log/httpd/error_log - 别怕错:SELinux 和防火墙确实复杂,慢慢就熟练了
- 记笔记:把常用命令和踩过的坑记下来
进阶方向
- Let's Encrypt:免费 SSL 证书
- 反向代理:配合 Nginx 使用
- 负载均衡:多服务器集群
- 容器化:Docker + Kubernetes
参考资源
遇到问题? 欢迎在评论区留言,我会尽力帮你解决!
觉得有用? 点个赞,让更多人看到!
Views: 2
