Linux小课堂: Apache服务在CentOS上的安装与基础配置指南
Apache服务概述
Apache(正确命名,原文"阿帕奇/阿帕奇"等表述统一修正)是跨平台的Web服务程序,与Nginx、IIS并列为市场占有率最高的Web服务解决方案,它是一款跨平台的开源Web服务程序,市场占有率较高,可在Windows、Linux等主流操作系统运行。其名称源自北美印第安部落,象征着稳定性和持久性
其名称源自北美印第安部落Apache族,寓意高超的策略与稳定性。在RedHat系列系统中安装包名为httpd(HTTP Daemon),而Ubuntu等发行版中仍保留apache命名
服务安装与启停
1 ) 安装命令
yum install httpd -y # -y参数自动确认安装
2 ) 服务管理命令集
| 操作 | 命令 | 作用 |
|---|---|---|
| 启动服务 | systemctl start httpd | 启动Apache进程 |
| 停止服务 | systemctl stop httpd | 终止Apache进程 |
| 重启服务 | systemctl restart httpd | 重新加载服务 |
| 重载配置 | systemctl reload httpd | 热更新配置文件 |
| 状态查看 | systemctl status httpd | 检测运行状态 |
| 开机自启 | systemctl enable httpd | 创建systemd软链接 |
| 禁用自启 | systemctl disable httpd | 移除systemd软链接 |
3 ) 进程验证方法
ps -aux | grep httpd # 检查进程是否存在
systemctl is-enabled httpd # 验证开机自启状态
防火墙端口配置
问题现象:服务启动后无法通过192.168.x.x访问,因firewalld默认屏蔽80端口
解决方案:
# 永久开放80端口(TCP协议)
firewall-cmd --zone=public --add-port=80/tcp --permanent # 立即生效配置
firewall-cmd --reload # 验证端口状态
firewall-cmd --list-ports # 查看开放端口
firewall-cmd --zone=public --query-port=80/tcp # 返回yes即成功
关键逻辑:
--permanent参数使配置持久化,需配合reload生效- 移除端口命令:
firewall-cmd --zone=public --remove-port=80/tcp --permanent
开机自启与验证
设置开机自启并验证服务:
systemctl enable httpd # 启用开机自启
systemctl is-enabled httpd # 检查是否启用(返回"enabled"表示成功)
访问http://localhost或服务器IP(如192.168.1.5),若显示Apache测试页面,表明服务运行正常
Apache核心配置文件解析
配置文件路径:/etc/httpd/conf/httpd.conf(CentOS体系)
包含三种信息类型:
- 注释:以
#开头的说明性文本 - 全局配置:作用于所有子站点的参数(如
ServerRoot、Listen) - 区域配置:针对特定目录或站点的参数(如
<Directory>块
配置参数分类
| 类型 | 示例参数 | 作用 | 默认值 |
|---|---|---|---|
| 全局配置 | ServerRoot | 服务主目录 | /etc/httpd |
ServerAdmin | 管理员邮箱 | root@localhost | |
Listen | 监听IP与端口 | 80 | |
User/Group | 运行进程的权限身份 | apache/apache | |
| 区域配置 | <Directory> | 目录访问权限控制 | 针对/或DocumentRoot |
DocumentRoot | 网站数据存储路径 | /var/www/html | |
DirectoryIndex | 默认索引页面文件 | index.html | |
| 日志配置 | ErrorLog | 错误日志路径 | /var/log/httpd/error_log |
CustomLog | 访问日志路径 | /var/log/httpd/access_log |
自定义网站目录实践
1 ) 创建新数据目录:
mkdir /home/web
echo "New web directory" > /home/web/index.html
2 ) 修改关键配置项:
# 修改主配置文件 编辑`/etc/httpd/conf/httpd.conf`,更改以下参数:
DocumentRoot "/home/web" # 原值:/var/www/html
<Directory "/home/web"> # 同步修改目录权限区域 AllowOverride None Require all granted
</Directory>
3 ) 重载服务使配置生效:
systemctl reload httpd
SELinux访问拦截问题
现象:修改DocumentRoot后访问显示默认测试页(非自定义内容)
原因:SELinux安全子系统禁止Apache进程访问非标准目录
解决方案(后续详解):
# 临时放行(重启失效)
setenforce 0 # 永久配置(需修改/etc/selinux/config)
semanage fcontext -a -t httpd_sys_content_t "/home/web(/.*)?"
restorecon -Rv /home/web
网络动态IP问题
虚拟机IP变动时,重启网络服务更新配置:
systemctl restart network
关键路径汇总
- 服务管理优先级:
修改配置后必须通过systemctl reload httpd重载服务,避免直接重启中断连接。 - 防火墙与端口:
--permanent参数确保规则持久化,配合firewall-cmd --reload即时生效。 - 目录权限链:
Apache需同时满足:- 文件系统权限(
chmod/chown) - 配置文件中
<Directory>块权限 - SELinux上下文约束(通过
ls -Z检查)
- 文件系统权限(
- 日志诊断:
实时监控日志快速定位问题:tail -f /var/log/httpd/error_log # 跟踪错误日志 tail -f /var/log/httpd/access_log # 跟踪访问日志
| 路径类型 | 位置 |
|---|---|
| 主配置文件 | /etc/httpd/conf/httpd.conf |
| 默认网站数据目录 | /var/www/html |
| 访问日志 | /var/log/httpd/access_log |
| 错误日志 | /var/log/httpd/error_log |
| 服务模块目录 | /etc/httpd/conf.modules.d/ |
网络说明:虚拟机IP可能因DHCP变化(如192.168.1.5→192.168.0.106),需通过ifconfig或systemctl restart network更新
关键点强调:
- 配置修改需同步更新
DocumentRoot和<Directory>路径,否则触发权限错误 - 防火墙开放端口后,必须通过
--reload激活规则,仅--permanent无效 - 所有操作需在配置文件语法验证后执行(
apachectl configtest)
