温馨提示×

ubuntu apache为啥显示403

小樊
40
2026-09-29 08:21:34
栏目: 智能运维

在 Ubuntu 上用 Apache 出现 403 Forbidden,最常见原因就那么几类,我按「从高到低概率」给你梳理,并附上排查方法。


一、目录权限问题(最常见)

Apache 运行用户一般是 www-data,如果网站目录它读不了,就会 403。

检查目录权限

namei -l /var/www/html/yourdir

正确权限示例

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

⚠️ 注意:

  • 目录至少要有 755
  • 文件至少 644

二、DocumentRoot 或目录没有 Require all granted

Apache 2.4 默认是拒绝访问的。

查看虚拟主机配置

sudo nano /etc/apache2/sites-available/000-default.conf

确保有类似:

<Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

改完后:

sudo apache2ctl configtest
sudo systemctl restart apache2

三、没有 index 文件,且禁止目录浏览

如果目录里没有:

index.html
index.php

而配置里没有:

Options Indexes

就会 403。

解决

  • 放一个 index.html 或
  • 允许目录列表(不推荐生产环境)

四、.htaccess 限制了访问

如果你启用了 .htaccess:

AllowOverride All

但 .htaccess 里有:

Deny from all
Require all denied

也会直接 403。


五、SELinux / AppArmor(Ubuntu 一般是 AppArmor)

Ubuntu 默认用 AppArmor,一般不会拦,但如果你改了网站目录(比如 /home/xxx):

sudo aa-status

如果用 home 目录:

sudo chmod 755 /home/youruser

六、访问的是真实文件但扩展名被限制

比如:

<Files *.md>
    Require all denied
</Files>

七、快速自查清单 ✅

# 1. 看错误日志
sudo tail -n 50 /var/log/apache2/error.log

# 2. 看配置语法
sudo apache2ctl -S

# 3. 看权限
ls -ld /var/www/html

八、如果你愿意,我可以直接帮你定位

你可以贴出:

  1. 访问的 URL
  2. /var/log/apache2/error.log 的相关报错
  3. 你的虚拟主机配置

我可以直接告诉你是哪一条导致的 403。

0 踩