Apache 2.4 访问被拒绝兼容

Apache 2.4 访问被拒绝兼容

我最近从 2.2 升级到 2.4,在虚拟主机上遇到了访问被拒绝的问题。错误日志是

[access_compat:error] [pid 27948] [client 1.2.3.4:5] AH01797: client denied by server configuration: /var/www/mysite

现在apache2.conf我目前有

<Directory />
  Options FollowSymLinks
  AllowOverride None
  Require all denied
</Directory>

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

在我的 vhost 文件中我有

<Directory /var/www/mysite>
  Require all granted
</Directory>

但访问我的网站时出现拒绝访问错误。

在我的 vhost 配置<Directory>部分中。

我现在需要 auth compat 模块,因为有很多.htaccess文件依赖于它,但我不明白当我正确使用较新的Require all语法时为什么在服务器配置级别需要它?

什么有效

如果我将以下内容放在我的虚拟主机的目录部分,它就可以工作。

Order deny,allow

将其删除(保留所有必需项),它再次失败。这就像 compat 模块默认的那样,Order allow,deny但据我所知没有这样的语句(not in apache.conf、not in conf-enabled/*、not in sites-enabled/*default*)。

Apache 文档没有说明 compat 和较新的 authz 模块如何协同工作(其网站上有一条评论指出了这一点)。我已经在其他 6 台服务器上实施了更改,没有任何问题。我已经处理了确保 .conf 位于配置文件末尾的问题。我运行了 apache2ctl configtest,我运行了 apache2ctl -S 来查看 vhosts 配置;一切都很好。

为什么需要旧的兼容 Order 语句?/为什么兼容的东西显然会覆盖较新的配置?

答案1

这不是 Apache 的错(好像它本来就是错!)。我发现我的一个 vhostOrder allow,deny在根目录中包含一个语句,并且这个代码片段不知何故被放在了结束</VirtualHost>元素之外。

因为 Apache 将所有启用的 vhost 都放在一个文件中,所以这相当于将其放在全局的顶层。只有逐个打开和关闭 vhost,我才能找到问题所在。

希望这个问题可以为其他人指出有用的问题。

答案2

你没有写出 vhost 文件的名称。在 apache 2.4 中,它必须具有后缀 .conf

否则,请查阅此处的清单。

将虚拟主机设置从 Apache 2.2 更新至 Apache 2.4

相关内容