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

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

错误403禁止您无权访问此服务器上的/。

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

发生的事情是apache2.4中配置文件的语法已经改变。

资料来源:在我升级到13.10之后,这也发生在我身上

conf.d文件

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

它们现在的工作方式与sitesmods工作方式相同。 只需将conf文件放在conf-available文件夹中,然后使用a2enconf 启用所需a2enconf

例:

我有一个文件conf.d/httpd.conf ,它有ServerName指令。
为了完成这项工作,我不得不将其移至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启用它。 现在它会给你一个错误的说法

错误:站点某站点不存在!

要解决此问题,请在sites-available所有配置文件中附加.conf 。 您可以在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 

虚拟主机指令:

允许/拒绝vs要求

如果您有以下内容:

  order allow,deny allow from all  

它应该成为:

  Require all granted  

有关详细信息,请查看DaveRandom对Stack Overflow上的答案的评论 。

简单地说,如果你升级到apache2.4并保留了apache2.2的旧httpd.conf ,那么allow指令应该保持正常工作。 如果您升级了httpd.conf (我建议),那么在将Order / Allow / Deny指令更改为等效的Require之前,您将收到403错误。

目录选项

如果你有目录选项,请注意它们都必须加上+-或者根本没有。 不允许混合使用两者:

例:

这是允许的:

  Options +Indexes +FollowSymLinks -MultiViews  

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

  Options Indexes FollowSymLinks MultiViews  

不再允许这样做:

  Options Indexes FollowSymLinks -MultiViews  

上次配置选项会抛出一个语法错误:

要么所有选项都必须以+或 – 开头,要么不选择任何选项。

重启apache

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

  sudo apache2ctl restart 

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

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

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

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

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

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

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