在 Ubuntu 下 Apache2 访问出现 403 Forbidden,通常不是“一个原因”,而是下面这些最常见情况之一。可以按顺序排查。
Apache 运行的用户是:
www-data
如果网站目录 没有给 www-data 读/执行权限,就会 403。
ls -ld /var/www/html
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
⚠️ 不要随便
chmod 777,不安全
Require all granted从 Apache 2.4 开始,默认是 拒绝所有访问。
sudo nano /etc/apache2/sites-enabled/000-default.conf
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
修改后重启:
sudo systemctl restart apache2
如果你访问的是:
http://ip/
但目录里没有:
index.html / index.php / index.htm
而 Options 又没开启目录浏览,就会 403。
echo "test" > /var/www/html/index.html
或允许目录浏览(不推荐生产环境):
Options +Indexes
Ubuntu 默认 没有 SELinux,但可能有 AppArmor。
你可以先临时排除:
sudo systemctl stop apparmor
sudo systemctl restart apache2
如果恢复,说明是权限策略问题。
如果你把网站放在:
/home/user/www
即使权限对,Apache 也可能 403。
sudo nano /etc/apache2/apache2.conf
确认有:
<Directory /home/user/www>
Require all granted
</Directory>
并且目录权限:
chmod 755 /home/user
chmod 755 /home/user/www
如果启用了 AllowOverride,.htaccess 里写错也会 403。
mv /var/www/html/.htaccess /var/www/html/.htaccess.bak
然后刷新页面。
访问 .php 直接 403,而不是下载或显示源码。
php -v
sudo apt install php libapache2-mod-php
sudo systemctl restart apache2
# 1. 看错误日志
sudo tail -n 50 /var/log/apache2/error.log
# 2. 看目录权限
ls -ld /var/www/html
# 3. 看 Apache 配置
sudo apache2ctl -S
# 4. 重启
sudo systemctl restart apache2
你可以直接贴出:
/var/log/apache2/error.log 里相关报错我可以 直接告诉你哪一行错了 ✅