在 Ubuntu 上使用 Apache 出现 403 Forbidden 错误,通常是因为权限问题或配置问题。下面按最常见原因逐一说明,并给出排查和解决办法。
Apache 运行的用户通常是 www-data,如果它没有权限读取目录或文件,就会 403。
检查:
ps aux | grep apache
一般看到:
www-data
解决:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
✅ 目录至少 755
✅ 文件至少 644
如果目录中没有 index.html / index.php,且未允许目录浏览,就会 403。
解决:
/var/www/html/index.html
或配置:
DirectoryIndex index.php index.html
Apache 默认配置可能包含:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
如果看到:
Require all denied
就会 403。
修复为:
Require all granted
然后重启:
sudo systemctl restart apache2
如果使用了 .htaccess,可能写了错误规则。
排查方法:
mv /var/www/html/.htaccess /tmp/
再访问测试。
Ubuntu 默认用 AppArmor,一般不会导致 403,但如果你改了网站目录(如 /home/user/www),可能受限。
解决(使用非默认目录时):
sudo chmod 755 /home/user
sudo chmod 755 /home/user/www
或修改 Apache 配置:
<Directory /home/user/www>
Require all granted
</Directory>
例如:
http://ip//var/www/html/site/解决:
grep DocumentRoot /etc/apache2/sites-enabled/000-default.conf
如果你用了 vhost:
<VirtualHost *:80>
DocumentRoot /var/www/mySite
<Directory /var/www/mySite>
Require all granted
</Directory>
</VirtualHost>
sudo tail -n 50 /var/log/apache2/error.log
namei -l /var/www/html/index.html
sudo apache2ctl configtest
AH01276: Permission denied
client denied by server configuration
看到这些基本就是权限或 Require 配置问题。
如果你愿意,可以告诉我:
我可以直接帮你定位是哪一条导致的 403。