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


34

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

错误403禁止访问您没有访问此服务器上的权限。

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

Answers:


59

所发生的是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

站点文件

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

例:

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

错误:站点不存在站点!

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

sudo find /etc/apache2/sites-available/ ! -iname '*.conf' -type f -exec mv '{}' '{}'.conf \;

如果您决定手动进行操作:

sudo rm /etc/apache2/sites-enabled/*
sudo a2ensite your-site-name

虚拟主机指令:

允许/拒绝与要求

如果您具有以下条件:

<Directory /path/to/your/site/>
    order allow,deny
    allow from all
</Directory>

它应该变成:

<Directory /path/to/your/site/>
    Require all granted
</Directory>

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

简而言之,如果您升级到apache2.4并保留了httpd.confapache2.2 的旧版本,则allow指令应能正常工作。如果您升级httpd.conf(这是我所暗示的),你会直到你改变获得403错误Order/ Allow/ Deny指令为等效Require

目录选项

如果你有目录选项,需要注意的是他们都必须有预加+-或他们没有在所有。不允许将两者混合使用:

例:

这是允许的:

<Directory /path/to/your/site/>
    Options +Indexes +FollowSymLinks -MultiViews
</Directory>

这就是(请注意,这些示例不会同时执行相同的操作,前一个示例禁用了该MultiViews选项,下一个示例则没有):

<Directory /path/to/your/site/>
    Options Indexes FollowSymLinks MultiViews
</Directory>

不再允许:

<Directory /path/to/your/site/>
    Options Indexes FollowSymLinks -MultiViews
</Directory>

最后一个配置选项将引发语法错误,提示:

所有选项都必须以+或-开头,否则就没有选项。

重新启动Apache

完成所有操作后,您需要重新启动apache服务器以使更改生效:

 sudo apache2ctl restart

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


1
在我的系统上,没有httpd.conf文件或conf.d目录。但是有一个apache2.conf文件。我尝试将其移动到conf-available目录中,并在重新启动apache2时收到以下错误:apache2:无法打开配置文件/etc/apache2/apache2.conf:没有这样的文件或目录 -可能是什么原因?
Amal Murali 2014年

@AmalMurali这httpd.conf只是一个例子。目录中可能没有任何配置文件conf.d,在这种情况下,只需跳过该步骤。至于apache2.conf,则不应将其移动到conf-available目录中。它是apache的主要配置文件,其路径应为/etc/apache2/apache2.conf,并且不得更改。
2014年

1
哇。这实际上是在任何地方都可以找到的唯一清晰的概述。谢谢。
Russ Bateman

没有config.dsites available文件夹。在此处查看所有配置文件:imgur.com/WczXp3v
diEcho 2014年

1
@EdwardBlack如果您仍在使用默认虚拟主机,则可能还有另一个原因,如以下问题的答案所述:Apache virtualhosts更新至13.10
Dan

0

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

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

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

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


0

我遇到了类似的问题。

除非使用“全部允许”,否则我无法让Apache 2.4运行,这很烦人,因为我想提供一个低于2.4的版本。经过大量的试验和错误以及大量的搜索之后,我发现了对access_compat的引用,并意识到那里只是为了兼容性。尽管apache文档指出两者都可以使用,但建议您不要使用。

我从/ etc / sysconfig / apache2加载文件中删除了此模块,这立即解决了我的问题。

问候利亚姆


-1

我正在从非标准目录提供文件,因此要进行升级,我必须编辑/etc/apache2/apache2.conf并添加:选项索引FollowSymLinks AllowOverride无要求全部授予

此后,以及上面建议的更改,403错误消失了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.