升级到apache2.4后出现403错误

use*_*336 34 apache2

从 Ubuntu 13.04 服务器升级后,www 页面不会自行显示。

错误 403 Forbidden 您无权访问 / 在此服务器上。

我已将访问控制保存从 apache2.2 更改为 apache2.4,但这不起作用。我还能做什么?

Dan*_*Dan 60

发生的事情是apache2.4中配置文件的语法发生了变化。

来源:我升级到 13.10 后也发生了这种情况

conf.d 文件

中的所有文件/etc/apache2/conf.d都应移动到/etc/apache2/conf-available.

他们现在的工作方式相同sitesmods工作。只需将您的 conf 文件放在conf-available文件夹中,然后使用a2enconf <config-file-name>.

例子:

我有一个包含conf.d/httpd.confServerName 指令的文件。
为了完成这项工作,我必须将它移动到conf-available目录并手动启用它。

sudo mv /etc/apache2/conf.d/httpd.conf /etc/apache2/conf-available/httpd.conf
sudo a2enconf httpd
Run Code Online (Sandbox Code Playgroud)

站点文件

以前,文件中/etc/apache2/sites-available没有扩展名。例如/etc/apache2/sites-available/default。现在需要.conf扩展。

例子:

如果有/etc/apache2/sites-available/some-site,在 13.04 中,您可以使用sudo a2ensite some-site. 现在它会给你一个错误说

错误:站点 some-site 不存在!

要解决此问题,请将 a 附加.confsites-available. 您可以在 中执行相同操作sites-enabled,也可以删除所有文件并手动重新启用它们。
我建议手动执行它们,因为您可能需要修复每个 VHost(下一步)。

sudo find /etc/apache2/sites-available/ ! -iname '*.conf' -type f -exec mv '{}' '{}'.conf \;
Run Code Online (Sandbox Code Playgroud)

如果您决定手动执行它们:

sudo rm /etc/apache2/sites-enabled/*
sudo a2ensite your-site-name
Run Code Online (Sandbox Code Playgroud)

虚拟主机指令:

允许/拒绝 vs 要求

如果您有以下情况:

<Directory /path/to/your/site/>
    order allow,deny
    allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

它应该变成:

<Directory /path/to/your/site/>
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请检查意见通过DaveRandom上的答案堆栈溢出。

简单地说,如果您升级到 apache2.4 并保留旧httpd.conf的 apache2.2,则允许指令应该继续正常工作。如果您升级httpd.conf(这是我所暗示的),你会直到你改变获得403错误Order/ Allow/Deny指令为等效Require

目录选项

如果您有目录选项,请注意它们都必须以 a+-或根本不带有。不允许混合使用:

例子:

这是允许的:

<Directory /path/to/your/site/>
    Options +Indexes +FollowSymLinks -MultiViews
</Directory>
Run Code Online (Sandbox Code Playgroud)

也是这样(请注意,这些示例不会做同样的事情,前一个禁用该MultiViews选项,下一个没有):

<Directory /path/to/your/site/>
    Options Indexes FollowSymLinks MultiViews
</Directory>
Run Code Online (Sandbox Code Playgroud)

这不再被允许:

<Directory /path/to/your/site/>
    Options Indexes FollowSymLinks -MultiViews
</Directory>
Run Code Online (Sandbox Code Playgroud)

最后一个配置选项会抛出一个语法错误说:

要么所有选项都必须以 + 或 - 开头,或者没有选项可以。

重启apache

一切完成后,您需要重新启动 apache 服务器以使更改生效:

 sudo apache2ctl restart
Run Code Online (Sandbox Code Playgroud)

您可以在官方文档中找到从 2.2 到 2.4的详细升级指南

  • 在我的系统上,没有 `httpd.conf` 文件或 `conf.d` 目录。但是有一个 `apache2.conf` 文件。我尝试将它移动到 `conf-available` 目录,当我重新启动 apache2 时出现以下错误: *apache2: 无法打开配置文件 /etc/apache2/apache2.conf: 没有这样的文件或目录* - 什么可以是原因吗? (2认同)

Mat*_*att 0

我假设这些网站正在您的 Ubuntu 服务器上运行。

检查您的 httpd.conf 以确保您的 DocumentRoot 设置指向正确的位置。

检查 DocumentRoot 引用的文件夹的文件权限是否可由运行 Web 服务器的用户读取。

检查您是否有适当的index.html/index.htm 等,并且网络服务器没有尝试执行目录列表。