Apache:客户端被服务器配置拒绝

Posted

技术标签:

【中文标题】Apache:客户端被服务器配置拒绝【英文标题】:Apache: client denied by server configuration 【发布时间】:2012-05-08 05:36:00 【问题描述】:

我来了

[2012 年 4 月 24 日星期二 12:12:55] [错误] [客户端 127.0.0.1] 客户端被服务器配置拒绝:/labs/Projects/Nebula/bin/

我的目录结构看起来像(我使用的是 Symfony 2,应该是其他 Web 框架的类似结构)

我的虚拟主机设置如下:

<VirtualHost nebula:80>
    DocumentRoot "/labs/Projects/Nebula/web/"
    ServerName nebula
    ErrorLog "/var/log/httpd/nebula-errors.log"
</VirtualHost>

<Directory "/labs/Projects/Nebula/">
    Options All
    AllowOverride All
    Order allow,deny
    Allow from 127.0.0 192.168.1 ::1 localhost
</Directory>

我想知道是什么问题,我该如何解决?

【问题讨论】:

@JiewMeng:你应该接受菲尔的回答。这似乎是今天 大多数 Apache 安装的问题(Apache 2.4)。谢谢。 【参考方案1】:

我在使用 Vesta CP 时遇到了这个问题,对我来说,诀窍是删除 .htaccess 并尝试再次访问任何文件。

这导致 .htaccess 文件重新生成,然后我能够访问我的文件。

【讨论】:

【参考方案2】:

这段代码对我有用..

 <Location />
Allow from all
Order Deny,Allow
</Location> 

希望这对其他人有所帮助

【讨论】:

绝对不应该鼓励添加到 apache 配置中。 这允许 apache 访问计算机上的每个文件。对安全非常不利。【参考方案3】:

在 Apache 2.4 中,旧的访问授权语法已被弃用,取而代之的是使用 Require 的新系统。

那么你想要的是如下内容:

<Directory "/labs/Projects/Nebula/">
  Options All
  AllowOverride All
  <RequireAny>
    Require local
    Require ip 192.168.1
  </RequireAny>
</Directory>

这将允许来自本地主机来自以“192.168.1”开头的IP地址的连接。

如果您不想立即更新配置,还有一个新模块可以让 Apache 2.4 识别旧语法:

sudo a2enmod access_compat

【讨论】:

【参考方案4】:

就我而言,关键是:

AllowOverride All

在虚拟主机定义中。 我希望它可以帮助某人。

【讨论】:

【参考方案5】:

如果你有

Allow from All

在 httpd.conf 然后确保我们有

index.php

就像 httpd.conf 中的下面一行

DirectoryIndex index.html index.php

【讨论】:

【参考方案6】:

Apache 2.4.3(或稍早一些)添加了一个新的安全功能,该功能通常会导致此错误。您还会看到“客户端被服务器配置拒绝”形式的日志消息。该功能需要授权用户身份才能访问目录。它由 Apache 附带的 httpd.conf 中的 DEFAULT 启用。您可以使用指令查看该功能的启用

Require all denied

这基本上是说拒绝所有用户访问。要解决此问题,请删除 denied 指令(或更好),将以下指令添加到您要授予访问权限的目录中:

Require all granted

<Directory "your directory here">
   Order allow,deny
   Allow from all
   # New directive needed in Apache 2.4.3: 
   Require all granted
</Directory>

【讨论】:

可能还需要在Require all granted之后添加Satisfy Any @MarkHu - 你能解释一下Satisfy any 在这种情况下的可能必要性吗?我之所以问,是因为我在这里把头发拉出来,加上这个,它让一切都为我工作。奇怪的是,在最近 Apache 升级到 2.4.9 之前,该应用程序一直在使用现有的 vhost 条目。更奇怪的是,它在另一台具有相同 app/vhost 和 Apache/PHP 版本的服务器上运行良好。不过不同的服务器——分别是 AWS Linux 和 Ubuntu 14.10。奇怪...我想我需要比较每个服务器的httpd.conf文件,看看那里是否有配置差异... 同时检查你的htaccess在你试图访问的路径 我的环境无法正常工作,直到我决定使用@MarkHu Satisfy Any 解决方案。谢谢!!! 即使在更改为要求全部授予后,它仍显示相同的错误访问被拒绝。【参考方案7】:

这是我在 debian 上的 symfony 1.4 虚拟主机文件,运行良好。

  <Directory /var/www/sf_project/web/>
    Options All Indexes FollowSymLinks    
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

如果您不想限制对特定 IP 范围的访问,例如本地主机使用这个:

Allow from 127.0.0.0/8

mod_authz_host 负责过滤 IP 范围。您可以在其中查找详细信息。

但问题可能与您的“apache2.conf”中的某种错误配置有关。

apache 在什么操作系统上运行?

【讨论】:

【参考方案8】:

好的,我使用了错误的语法,我应该使用

Allow from 127.0.0.1
Allow from ::1
...

【讨论】:

对于 apache > 2.4,仅此一项对我不起作用。但正如@Phil-L 所建议的那样,它与Require all granted 结合使用时有效【参考方案9】:

您能否尝试将“允许从 127.0.0 192.168.1 ::1 localhost”更改为“全部允许”。 如果这样可以解决您的问题,您需要减少对可以从何处请求内容的限制

【讨论】:

以上是关于Apache:客户端被服务器配置拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Apache:客户端被服务器配置拒绝

Apache 2.2:“客户端被服务器配置拒绝” - .htaccess 密码保护

Apache/2.4.7 (Ubuntu) AH01630:客户端被服务器配置拒绝,尽管“要求所有授权”

AH01630:客户端被服务器配置拒绝,但要求所有已设置(Apache 2.4,CentOs)

Ubuntu Server 上的 Apache 2.4.6:客户端被服务器配置拒绝 (PHP FPM) [加载 PHP 文件时]

Ubuntu Server 上的 Apache 2.4.6:客户端被服务器配置拒绝 (PHP FPM) [加载 PHP 文件时]