在 Ubuntu 上用 Apache 出现 403 Forbidden,通常不是“程序坏了”,而是权限或配置不允许访问。下面按最常见原因逐条说明,并给出排查方法。
| 原因 | 典型表现 |
|---|---|
| 目录/文件权限不足 | 浏览器 403,日志 Permission denied |
| Apache 用户无权访问目录 | 同上 |
| DocumentRoot 配置错误 | 访问根目录 403 |
| 缺少默认索引文件 | DirectoryIndex 问题 |
<Directory> 限制过严 |
Require all denied |
| SELinux / AppArmor(少见) | Ubuntu 默认不启用 SELinux |
| .htaccess 拦截 | 被规则拒绝 |
sudo tail -n 50 /var/log/apache2/error.log
常见日志含义:
Permission denied → 文件/目录权限问题client denied by server configuration → 配置问题Apache 在 Ubuntu 默认用户是:
www-data
✅ 正确权限示例:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www
⚠️ 不要这样:
chmod 777 # 不安全,也可能被 Apache 拒绝
虚拟主机示例:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
❌ 错误示例:
Require all denied
如果目录没有:
index.html
index.php
而配置是:
Options -Indexes
→ 会直接 403
✅ 解决:
index.htmlOptions +Indexes
检查站点目录是否有:
ls -la /var/www/html/.htaccess
临时测试:
mv .htaccess .htaccess.bak
例如:
/var/www/html/uploads
确保:
chmod 755 uploads
chown www-data:www-data uploads
# 1. 文件是否存在
ls -l /var/www/html
# 2. Apache 配置是否有语法错误
sudo apache2ctl configtest
# 3. 重启 Apache
sudo systemctl restart apache2
你可以贴出:
我可以直接告诉你是哪一行配置导致的 403。