require all granted 是 apache 2.4+ 开放外网访问的关键指令,但必须置于匹配 documentroot 的 块内,显式覆盖父级 deny、确保文件系统权限与 selinux 上下文正确,并排除防火墙、云安全组及反向代理等网络层拦截。

确认 Directory 范围与 DocumentRoot 一致
如果网站根目录是 /var/www/html,但你在 `
正确做法是:
- 显式指定目标目录,比如:
<directory></directory> - 内部必须包含
Require all granted - 同时检查
DocumentRoot确实指向该路径
检查父级配置是否覆盖了权限
Apache 权限是“自上而下继承 + 最内层优先”。常见陷阱是:主配置(如 000-default.conf)里写了 AllowOverride None 或 Require all denied,而你的虚拟主机中只写了 Require all granted,但没显式覆盖父级 deny。
务必在你的 `
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
-
Require all granted—— 允许所有 IP(含外网) -
Options FollowSymLinks(可选)—— 避免软链接报错 -
AllowOverride None(若不用 .htaccess)或AllowOverride All(若需支持)
验证 Apache 运行用户有目录执行权限
即使配置全开,Linux 文件系统权限不到位也会返回 403 Forbidden。Apache 进程(如 www-data 或 apache)必须对目录有 x(执行)权限,才能进入并读取内容。
执行检查:
-
ls -ld /var/www/html→ 确保末位有x,例如drwxr-xr-x -
getenforce→ 若为Enforcing,需确认 SELinux 上下文:用semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'+restorecon -Rv /var/www/html
排除网络与服务层拦截
外网打不开 ≠ Apache 没开放。还需确认:
- 服务器防火墙放行 80/443 端口(
firewall-cmd --permanent --add-service=http) - 云服务器安全组(如阿里云、AWS)已放开对应端口入向规则
- 没有其他反向代理(如 Nginx)前置拦截,或其配置未透传请求头与源 IP
- 域名 DNS 解析正常,且未被本地 hosts 或运营商劫持










