在 Ubuntu 上用 Apache 出现 403 Forbidden,本质原因只有一个:Apache 没有权限访问你请求的资源。但具体触发点很多,下面按「最常见 → 较少见」逐条说明,并给出排查方法。
Apache 运行用户是:
www-data
如果网页目录权限不对:
/var/www/html
检查:
ls -ld /var/www/html
ls -l /var/www/html/index.html
✅ 正确示例:
drwxr-xr-x www-data www-data
-rw-r--r-- www-data www-data
修复:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
如果目录里没有:
index.html
index.php
而 Apache 配置中:
Options -Indexes
就会 403。
✅ 解决:
Options +Indexes
虚拟主机配置错误:
DocumentRoot /wrong/path
Apache 访问不到真实目录 → 403
检查:
apache2ctl -S
<Directory> 权限没开示例错误配置:
<Directory /var/www/html>
Require all denied
</Directory>
✅ 正确:
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
修改后:
sudo systemctl reload apache2
如果站点有 .htaccess:
Deny from all
或:
Require all denied
会直接 403。
即使文件是 755,父目录也必须至少有 711
例如:
/home/user/www ❌
Apache 无法进入 /home/user
✅ 解决:
/var/wwwchmod 711 /home/user
Ubuntu 默认用 AppArmor
检查:
sudo aa-status
如果 Apache 被限制访问某目录,会 403。
访问 index.php 但没装:
sudo apt install libapache2-mod-php
例如:
/server-status
未授权 IP → 403
# 1. 看错误日志(最重要)
sudo tail -n 50 /var/log/apache2/error.log
# 2. 看配置
apache2ctl -S
# 3. 看权限
namei -l /var/www/html/index.html
你可以直接贴:
/var/log/apache2/error.log 报错内容我可以精准定位是哪一条导致的 403。