温馨提示×

ubuntu apache为何报错403

小樊
46
2026-09-23 11:43:30
栏目: 智能运维

在 Ubuntu 上用 Apache 出现 403 Forbidden,本质原因只有一个:Apache 没有权限访问你请求的资源。但具体触发点很多,下面按「最常见 → 较少见」逐条说明,并给出排查方法。


一、最常见原因

1️⃣ 目录权限不足(80% 的 403 都在这)

Apache 运行用户是:

www-data

如果网页目录权限不对:

/var/www/html

检查:

ls -ld /var/www/html
ls -l /var/www/html/index.html

✅ 正确示例:

drwxr-xr-x www-data www-data
-rw-r--r-- www-data www-data

修复:

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

2️⃣ 没有 index 文件,且禁用了目录浏览

如果目录里没有:

index.html
index.php

而 Apache 配置中:

Options -Indexes

就会 403。

✅ 解决:

  • 放一个 index 文件
  • 或允许目录浏览(不推荐生产环境):
Options +Indexes

3️⃣ DocumentRoot 配置错误

虚拟主机配置错误:

DocumentRoot /wrong/path

Apache 访问不到真实目录 → 403

检查:

apache2ctl -S

二、Apache 配置相关

4️⃣ <Directory> 权限没开

示例错误配置:

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

✅ 正确:

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

修改后:

sudo systemctl reload apache2

5️⃣ .htaccess 限制

如果站点有 .htaccess:

Deny from all

或:

Require all denied

会直接 403。


三、文件系统 & 安全机制

6️⃣ 父目录没有执行权限(非常隐蔽)

即使文件是 755,父目录也必须至少有 711

例如:

/home/user/www   ❌

Apache 无法进入 /home/user

✅ 解决:

  • 放到 /var/www
  • 或修改权限:
chmod 711 /home/user

7️⃣ SELinux / AppArmor(Ubuntu 常见 AppArmor)

Ubuntu 默认用 AppArmor

检查:

sudo aa-status

如果 Apache 被限制访问某目录,会 403。


四、PHP / 特殊场景

8️⃣ PHP 文件但没装 PHP

访问 index.php 但没装:

sudo apt install libapache2-mod-php

9️⃣ 访问被禁止的路径

例如:

/server-status

未授权 IP → 403


五、快速排查流程(推荐)

# 1. 看错误日志(最重要)
sudo tail -n 50 /var/log/apache2/error.log

# 2. 看配置
apache2ctl -S

# 3. 看权限
namei -l /var/www/html/index.html

六、如果你愿意

你可以直接贴:

  • 访问的 URL
  • Apache 虚拟主机配置
  • /var/log/apache2/error.log 报错内容

我可以精准定位是哪一条导致的 403。

0 踩