apache 2.4+ 使用 require 指令控制权限,如 require all denied、require ip 192.168.10.0/24、require local 等,默认多规则为“或”,需“且”时须用 包裹;未显式声明 require all denied 可能继承父目录权限导致意外放行。

Apache 权限控制写法取决于你用的是 2.2 还是 2.4+ 版本,两者语法完全不同。写错会导致 500 错误或权限失效,必须先确认版本(运行 httpd -v 或 apache2ctl -v)。
Apache 2.4+(主流新版本)用 Require 指令
这是当前推荐写法,简洁、统一、逻辑清晰。
<directory>
# 默认拒绝所有访问
Require all denied
# 允许特定 IP 段
Require ip 192.168.10.0/24
# 同时允许本地回环访问
Require local
# 还要用户认证?加上这行(需配合 Auth 配置)
Require valid-user
</directory>
-
Require all denied:彻底关闭访问(白名单模式起点) -
Require all granted:完全放行(慎用) -
Require ip 192.168.1.100:单 IP -
Require ip 10.0.0.0/8:CIDR 网段 -
Require local:等价于127.0.0.1和::1 - 多条
Require默认是 “或”关系;如需“且”,必须包在<requireall></requireall>里:
<requireall>
Require ip 192.168.5.0/24
Require valid-user
</requireall>
⚠️ 注意:没写 Require all denied 时,可能继承父目录权限,造成意外放行。
Apache 2.2(旧版,已逐步淘汰)用 Order/Allow/Deny
仅在老旧环境或遗留系统中遇到,语法易混淆,不建议新项目使用。
<directory>
Order deny,allow
Deny from all
Allow from 192.168.1.0/24
Allow from 127.0.0.1
</directory>
-
Order deny,allow:先执行Deny,再叠加Allow(最终允许的是交集后的结果) -
Order allow,deny:先允许全部,再按Deny排除(更像黑名单模式)
常见组合:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 只允许可信网段:
Order deny,allow+Deny from all+Allow from 10.0.0.0/8 - 封禁某个 IP:
Order allow,deny+Allow from all+Deny from 203.0.113.99
用户认证(Basic Auth)通用写法(2.2 & 2.4 都支持)
配合权限控制,常用于后台路径:
<directory>
AuthType Basic
AuthName "Admin Area"
AuthUserFile /etc/httpd/.htpasswd
Require valid-user
</directory>
- 确保
mod_auth_basic和mod_authn_file已启用 -
.htpasswd文件用htpasswd -c /etc/httpd/.htpasswd username创建 - Apache 进程必须有该文件的读取权限(如
chown root:apache /etc/httpd/.htpasswd; chmod 640)
用 .htaccess 实现目录级控制(需 AllowOverride All)
在目标目录下建 .htaccess 文件,内容和 <directory></directory> 块内一致:
# 关闭目录浏览 Options -Indexes # 仅允许内网 + 认证用户 Require ip 192.168.0.0/16 Require valid-user
但前提是主配置中对应目录启用了覆盖权限:
<directory>
AllowOverride All
</directory>
否则 .htaccess 不生效。
不复杂但容易忽略。










