在 Ubuntu 上搭建 LAMP(Linux + Apache + MySQL + PHP) 环境时,访问网页出现 403 Forbidden 是非常常见的问题。下面按最常见原因 → 排查方法 → 解决办法给你总结一下。
Apache 默认以 www-data 用户运行,如果网站目录没有给它读权限,就会 403。
检查:
ls -l /var/www/html
解决:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
如果目录里没有 index.html 或 index.php,且未开启目录浏览,就会 403。
解决:
sudo apt install libapache2-mod-php
确保有:
/var/www/html/index.php
或修改 Apache 配置:
DirectoryIndex index.php index.html
Ubuntu 的 Apache 默认配置中可能有:
<Directory /var/www/html>
Require all granted
</Directory>
如果是:
Require local
或
Require ip 127.0.0.1
远程访问就会 403。
解决:
sudo nano /etc/apache2/apache2.conf
修改:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
然后:
sudo systemctl restart apache2
如果你用了 .htaccess,但 Apache 没开 AllowOverride:
AllowOverride None
会导致 403。
解决:
AllowOverride All
Ubuntu 默认 不用 SELinux,用 AppArmor,所以一般不是这个问题。
例如:
http://ip/test/
但 /var/www/html/test 权限不对。
解决:
sudo chmod 755 /var/www/html/test
如果是自定义 vhost:
sudo nano /etc/apache2/sites-available/xxx.conf
确认:
DocumentRoot /var/www/html
<Directory /var/www/html>
Require all granted
</Directory>
启用:
sudo a2ensite xxx.conf
sudo systemctl reload apache2
# 1. 看 Apache 错误日志
sudo tail -n 50 /var/log/apache2/error.log
# 2. 看权限
ls -l /var/www/html
# 3. 看配置
sudo apache2ctl configtest
你可以把下面信息发我:
/var/log/apache2/error.log 中的报错内容我可以直接告诉你是哪一条导致的 403。