Apache主要目录结构

配置文件关系图:

1. /etc/httpd/conf/httpd.conf**(主配置文件)**
这是 Apache 的"总控开关",包含全局设置。关键部分包括:
-
这是 Apache 的主配置文件,启动时首先读取。
-
包含全局设置:监听端口、服务器根目录、模块加载、默认虚拟主机等。
-
其他配置通常通过
Include指令从这里引入。ServerRoot "/etc/httpd" # Apache 安装根目录
Listen 80 # 监听端口
Include conf.modules.d/*.conf # 加载模块配置
User apache # 进程运行用户
Group apache
ServerAdmin root@localhost
ServerName localhost:80
DocumentRoot "/var/www/html" # 默认网站根目录
1.1目录权限控制
DocumentRoot "/var/www/html" #网站的默认文档根目录。
<Directory "/var/www"> 和 <Directory "/var/www/html"> 的区别
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www">
- 匹配整个
/var/www目录(包括其子目录)。 - 设置全局权限,防止其他程序在
/var/www下创建恶意内容。 AllowOverride None:禁止.htaccess文件覆盖配置。Require all granted:允许所有人访问该目录(但通常只用于管理目的)。
<Directory "/var/www/html">
- 只匹配
/var/www/html这个具体目录。 - 更精细地控制网站主目录的行为。
Options Indexes FollowSymLinks:允许目录列表(Indexes),并支持符号链接(FollowSymLinks)。AllowOverride None:仍禁用.htaccess。Require all granted:允许公开访问。
1.2.包含其他配置
IncludeOptional conf.d/*.conf # ← 关键!自动加载 conf.d 下的所有 .conf 文件
所有自定义虚拟主机、SSL、重写规则都应放在 conf.d/ 中,而不是直接改 httpd.conf
Include conf.modules.d/*.conf
2. /etc/httpd/conf.modules.d/****(模块加载目录)
每个 .conf 文件负责加载一组模块,例如:
-
00-base.conf:加载核心模块(mod_mime,mod_dir等) -
10-php.conf:加载libphp7.so -
00-mpm.conf:选择多路处理模块(prefork / worker / event)/etc/httpd/conf.modules.d/10-php.conf
LoadModule php7_module modules/libphp7.so
模块必须先加载,才能在配置中使用其指令(如 php_value)。
- 虚拟主机配置目录(推荐使用)
3. 虚拟主机配置目录(扩展配置目录)
这是最常用的自定义配置位置。
- 存放自定义站点配置、虚拟主机(VirtualHost)、SSL 配置等。
- 所有
*.conf文件都会被自动加载(顺序按字母)。 - 被
httpd.conf包含:
|------------------|----------------------------|
| ssl.conf | 启用 HTTPS,配置 443 端口 |
| autoindex.conf | 允许目录列表(Options +Indexes) |
| your-site.conf | 你自己的虚拟主机 |
# /etc/httpd/conf.d/myapp.conf
<VirtualHost *:80>
ServerName myapp.local
DocumentRoot /opt/myapp/web
<Directory /opt/myapp/web>
Require all granted
AllowOverride All
</Directory>
ErrorLog /var/log/httpd/myapp_error.log
CustomLog /var/log/httpd/myapp_access.log combined
</VirtualHost>
重启 Apache 后自动生效,无需修改主配置。
✅ 最佳实践:你的 YUM 源、网站、反向代理等配置都应放在这里 ,而不是修改 httpd.conf。
例如:你可以创建 /etc/httpd/conf.d/repo.conf 来专门配置仓库访问。
4. 其他重要文件/目录
|-----------------------------------------|-------------------------------------------------------------|
| 路径 | 作用 |
| /etc/httpd/conf/magic | MIME 类型识别规则(用于 mod_mime_magic ) |
| /var/log/httpd/ | 日志目录:- access_log:访问日志 - error_log:错误日志(排查 404/500 必看!) |
| /var/www/html/ | 默认 Web 根目录(DocumentRoot) |
| /etc/sysconfig/httpd | 启动参数配置(如设置环境变量、额外选项) |
| /usr/lib/systemd/system/httpd.service | systemd 服务单元文件(控制启动方式) |
5.配置加载顺序
/etc/httpd/conf/httpd.conf
-
- → 加载
/etc/httpd/conf.modules.d/*.conf - → 加载
/etc/httpd/conf.d/*.conf
- → 加载
⚠️ 注意:后加载的配置会覆盖先加载的同名指令(取决于指令的作用域和是否可重复)。
典型工作流程(以访问 http://example.com/ 为例)
- 用户浏览器请求 → 到达服务器 80 端口 #/etc/httpd/conf/httpd.conf 的Listen 80
- Apache 查找匹配的
<VirtualHost *:80>#/etc/httpd/conf.d/*.conf(通常是自定义虚拟主机文件) - 根据
ServerName example.com找到对应虚拟主机
#同一个<VirtualHost>块内的ServerName如:/etc/httpd/conf.d/example.con - 获取
DocumentRoot /var/www/example
#1.同一个<VirtualHost>块内的DocumentRoot
#2.它覆盖全局 httpd.conf 中的 DocumentRoot(作用域优先级:<VirtualHost> > 全局)
- 将 URL
/index.html映射为/var/www/example/index.html
#默认映射无单独配置文件,但可被 conf.d/example.conf 中Alias 或 RewriteRule 覆盖。
- 检查
<Directory "/var/www/example">权限
#<Directory> 指令块,通常和 DocumentRoot 写在同一个虚拟主机配置文件中。
#注意:如果你没写这个<Directory>块,Apache 会使用 httpd.conf 中对/var/www 或 / 的默认权限,可能导致 403 Forbidden!
- 返回文件内容(或 403/404 错误)
6、常用配置指令速查
|------------------------------|-----------------------------|
| 指令 | 作用 |
| Listen | 监听 IP:端口 |
| ServerName | 服务器主机名(避免启动警告) |
| DocumentRoot | 网站根目录 |
| <Directory> | 控制目录访问权限 |
| AllowOverride | 是否允许 .htaccess覆盖配置 |
| Require | 访问控制(all granted = 允许所有人) |
| ErrorLog / CustomLog | 日志路径 |
| Include/ IncludeOptional | 包含其他配置文件 |
7、安全与权限注意事项
- 不要开放敏感目录:
<Directory "/">
Require all denied
</Directory>
- 限制 .htaccess****使用:
AllowOverride None # 提高性能,增强安全
- SELinux 上下文(CentOS/RHEL):
sudo semanage fcontext -a -t httpd_sys_content_t "/opt/myapp(/.*)?"
sudo restorecon -R /opt/myapp
- 防火墙放行端口:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
8.实用命令
查看当前生效的完整配置
sudo httpd -S
- 显示虚拟主机、监听端口、配置文件来源等,排错神器!
检查配置语法是否正确
sudo httpd -t 或 sudo apachectl configtest
✅ 输出 Syntax OK 表示配置无语法错误。
查看已加载的模块
httpd -M