apache 配置需遵循按需启用、最小授权、路径精准、指令协同原则:必须使用与documentroot对齐的绝对路径,options按场景精简(如上传目录禁用execcgi),require显式授权(默认拒绝),allowoverride生产环境设为none,并用filesmatch阻断上传目录脚本执行。

Apache <directory></directory> 块里的选项不是随便堆砌的,关键在于按需启用、最小授权、路径精准、指令协同。配错一个选项,轻则功能异常(比如打不开目录列表),重则引发安全漏洞(如脚本被执行、敏感文件被下载)。
路径必须用绝对路径且与 DocumentRoot 对齐
这是所有配置生效的前提:
- ✅ 正确写法:
<directory></directory>(DocumentRoot 是/var/www/example.com) - ❌ 错误写法:
<directory></directory>(影响其他站点)、<directory></directory>(不匹配,规则不生效) - 子目录也要完整路径:
<directory></directory>,不能简写为uploads或./uploads
Options 指令要按场景精简启用
它控制目录级功能开关,常见组合如下:
公开静态站点根目录(如
/var/www/example.com):Options FollowSymLinks Indexes
→ 允许符号链接 + 目录索引(无 index 文件时显示文件列表)禁用目录浏览但保留链接支持(更安全):
Options FollowSymLinks -Indexes
→ 减号表示禁用,避免暴露文件结构上传目录(如
/uploads)必须禁用执行能力:Options -ExecCGI -Includes -MultiViews
→ 明确关闭 CGI、服务端包含、内容协商等高风险功能绝对禁止一切额外行为(如备份目录、管理后台):
Options None
→ 不继承父级 Options,彻底锁死功能面
⚠️ 注意:
Options All不推荐,尤其在生产环境;Indexes和ExecCGI是高频攻击入口,非必要不开启。
Require 必须显式声明访问权限
Apache 2.4+ 默认“拒绝一切”,不写 Require 就等于没授权:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 放行所有人访问:
Require all granted - 仅允许内网 IP:
Require ip 10.0.0.0/8 172.16.0.0/12 - 拒绝特定 IP:
Require not ip 192.168.1.100 - 多条件“且”关系(如 IP + 认证):
<requireall> Require ip 192.168.1.0/24 Require valid-user </requireall>
AllowOverride 要按需收紧,生产环境建议设为 None
.htaccess 是权限绕过的常见突破口:
-
AllowOverride None:完全禁用.htaccess,所有权限逻辑收归主配置(推荐生产环境使用) -
AllowOverride FileInfo:只允许重写(RewriteRule)、重定向(Redirect)等安全指令 -
AllowOverride AuthConfig:仅开放认证相关指令(如AuthType,Require) - ❌ 避免
AllowOverride All,除非你完全信任目录下所有用户能写.htaccess
上传目录需额外加 FilesMatch 阻断脚本执行
仅靠 Options 不够,必须从文件粒度拦截:
<directory>
Options -ExecCGI -Includes
Require all granted
<filesmatch>
Require all denied
</filesmatch></directory>
→ 即使上传了 .php 文件,也无法被执行。
不复杂但容易忽略










