我最近从 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>
在我的虚拟主机文件中,我有
<Directory /var/www/mysite>
Require all granted
</Directory>
但是访问我的网站会出现拒绝访问错误。
在我的虚拟主机配置<Directory>
部分。
我现在需要 auth compat 模块,因为有很多.htaccess
文件依赖它,但是当我正确使用较新的Require all
语法时,我不明白为什么在服务器配置级别需要它?
什么有效
如果我将以下内容放在我的虚拟主机的目录部分,它就可以工作。
Order deny,allow
把它拿走(让所有必需的都被授予)它再次失败。它就像 compat 模块默认为Order allow,deny
但据我所知没有这样的声明(不是 in apache.conf
, not in conf-enabled/*
, not in sites-enabled/*default*
)。
Apache 文档没有说明 compat 和较新的 authz 模块如何协同工作(他们网站上的评论指出了这一点)。我已经在其他 6 台服务器上实施了更改,没有任何问题。我已经处理了确保 .conf 位于配置文件末尾的问题。我已经运行了 apache2ctl configtest,我已经运行了 apache2ctl -S 来查看 vhosts 配置;都好。
为什么需要旧的兼容订单声明?/ 为什么兼容的东西显然会覆盖较新的配置?
您没有写 vhost 文件的名称。在 apache 2.4 中它必须有后缀 .conf
否则,请在此处查看清单。
将虚拟主机设置从 Apache 2.2 更新到 Apache 2.4
这不是 Apache 的错(就好像它曾经是!)。我发现我的一个虚拟主机
Order allow,deny
在根目录中包含一个语句,并且这个片段不知何故被放在了结束</VirtualHost>
元素之外。因为 Apache 源代码都启用了 vhost 到一个文件中,所以这相当于将它放在顶部,全局级别。只有一个一个地打开和关闭vhosts,我才发现问题。
希望这个问题对其他人来说是一个有用的问题。