温馨提示×

为什么ubuntu apache2报错403

小樊
38
2026-09-17 09:38:43
栏目: 智能运维

在 Ubuntu 上 Apache2 报 403 Forbidden 是非常常见的问题,本质原因通常是:Apache 没有权限访问你请求的资源。下面按「最常见 → 不常见」给你系统梳理一下原因和对应解决办法。


一、最常见原因(90% 的情况)

1️⃣ 目录权限不足(重点)

Apache 运行的用户是:

www-data

如果你访问的目录或文件,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

2️⃣ 没有默认首页文件

Apache 默认会找:

index.html
index.php

如果目录里没有这些文件,又禁止目录浏览 → 403

解决:

  • 放一个 index.html
  • 或修改配置允许目录浏览(不推荐生产)

3️⃣ Apache 配置中 Directory 被拒绝

在虚拟主机或 /etc/apache2/apache2.conf 中:

❌ 错误示例:

<Directory /var/www/html>
    Require all denied
</Directory>

✅ 正确示例:

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

修改后重启:

sudo systemctl restart apache2

二、虚拟主机 / 自定义目录常见坑

4️⃣ 你用的是非标准目录(如 /home/user)

Apache 默认 不允许访问 /home 下目录

解决:

<Directory /home/user/site>
    Require all granted
</Directory>

并确保:

chmod 755 /home/user

5️⃣ .htaccess 被禁用或写错

如果 .htaccess 中有:

Deny from all

或:

AllowOverride None

都会导致 403

✅ 改为:

AllowOverride All

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

Ubuntu 默认用 AppArmor,一般不会拦,但如果你改过:

sudo aa-status

四、最容易忽略的点

6️⃣ 文件本身权限是 644 但目录是 700

目录必须至少有 755


7️⃣ 访问的是 CGI / PHP 但没执行权限

sudo chmod +x script.php

五、快速排查流程(建议照做)

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

# 2. 看目录权限
namei -l /var/www/html

# 3. 看配置
sudo apache2ctl -S

六、如果你愿意,我可以精准帮你定位

你可以直接贴:

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

我可以直接告诉你是哪一行配置导致的 403

0