温馨提示×

ubuntu apache为何访问403

小樊
44
2026-10-19 19:34:53
栏目: 智能运维

在 Ubuntu 上用 Apache 出现 403 Forbidden,通常不是“权限配置错了”这么简单,而是下面几类原因之一。我按最常见 → 较少见给你梳理,并给出排查方法。


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

Apache 运行的用户一般是:

www-data

1. 目录/文件权限不对

例如你的网站目录是 /var/www/html:

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

✅ 正确示例:

drwxr-xr-x www-data www-data /var/www/html
-rw-r--r-- www-data www-data index.html

❌ 常见错误:

  • 目录是 700
  • 文件属于 root,Apache 读不了

修复方式

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

二、Apache 配置中没有 Directory 权限(非常常见)

即使文件权限正确,Apache 默认可能禁止访问目录。

查看虚拟主机配置

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

确保有类似:

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

⚠️ 如果没有 Require all granted,就会 403。

修改后:

sudo systemctl reload apache2

三、DocumentRoot 设置错误

例如:

DocumentRoot /var/www/html

但你实际文件在:

/home/user/www

→ Apache 找不到文件 → 403

✅ 确保:

  • DocumentRoot 存在
  • 目录权限正确
  • <Directory> 指向同一个路径

四、使用了 .htaccess 但被禁止

如果你用了 .htaccess:

AllowOverride None

但 .htaccess 里有规则 → 可能 403

✅ 改为:

AllowOverride All

五、SELinux(Ubuntu 一般没开,但值得提)

Ubuntu 默认 不用 SELinux(用 AppArmor),但如果你手动开过:

getenforce

如果是 Enforcing,可能需要:

chcon -R -t httpd_sys_content_t /var/www/html

六、index 文件不存在且禁止目录浏览

如果目录里没有:

  • index.html
  • index.php

且配置是:

Options -Indexes

→ 403

✅ 解决:

  • 放 index 文件
  • 或开启目录浏览(不推荐生产)

七、访问的是 CGI / PHP 但配置错误

例如:

  • PHP 没装
  • .php 被当作普通文件
  • php-fpm 没运行

可看错误日志:

sudo tail -f /var/log/apache2/error.log

八、AppArmor(Ubuntu 特有)

如果你把网站放在:

/home
/media

AppArmor 可能阻止 Apache 读取。

✅ 解决:

  • 放 /var/www
  • 或修改 AppArmor 配置

快速自查清单 ✅

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

# 2. 权限
ls -ld /var/www/html

# 3. 配置
sudo apache2ctl -S

# 4. 重载
sudo systemctl reload apache2

如果你愿意,可以把下面信息发我,我可以直接帮你定位:

  1. 访问的 URL
  2. error.log 报错内容
  3. 虚拟主机配置
  4. 网站目录路径

我可以一步一步帮你修到不 403。

0 踩