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


150

我正进入(状态

[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>

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


1
@JiewMeng:您可能应该接受Phil的回答。这似乎是当今大多数 Apache安装(Apache 2.4)的问题。谢谢。
dotancohen

Answers:


396

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

Require all 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>

9
Satisfy AnyRequire all granted
MarkMark 2014年

@MarkHu-您能Satisfy any在这种情况下解释可能的必要性吗?我之所以问是因为我在这里拔头发,并添加它使一切对我都有效。奇怪的是,在Apache最近升级到之前,该应用程序一直在使用现有的vhost条目2.4.9。再次奇怪的是,它在具有相同app / vhost和Apache / PHP版本的另一台服务器上运行良好。但是,不同的服务器-分别是AWS Linux和Ubuntu 14.10。奇怪...我想我需要比较每个服务器的httpd.conf文件,看看那里是否存在配置差异...
Darragh Enright 2014年

还要htaccess在您尝试访问的路径处检查您的位置
Ujjwal Singh

在决定使用@MarkHu Satisfy Any解决方案之前,我的环境无法正常工作。谢谢!!!
Neonigma

即使更改为要求全部授予后,它也显示相同的错误访问被拒绝。
Deepak

10

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

Allow from 127.0.0.1
Allow from ::1
...

1
对于apache> 2.4,仅此一项无法为我工作。但是它与Require all granted@ Phil-L建议结合使用时有效
Mugoma J. Okomba

5

在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

1

您可以尝试将“允许从127.0.0 192.168.1 :: 1本地主机”更改为“允许所有”。如果这样可以解决您的问题,则需要减少对可从何处请求内容的限制


1

这是我在debian上的symfony 1.4虚拟主机文件,可以正常工作。

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

如果您不想限制对特定IP范围的访问,例如localhost,请使用以下命令:

Allow from 127.0.0.0/8

mod_authz_host负责过滤IP范围。您可以在其中查找详细的内容。

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

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


1

如果你有

Allow from All

在httpd.conf中,然后确保我们有

index.php

就像在httpd.conf的下一行

DirectoryIndex index.html index.php

1

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

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



-3

这段代码对我有用。

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

希望这对别人有帮助


1
绝对不应鼓励将此方法添加到apache配置中。
Ricky Mutschlechner,2015年

这使apache可以访问计算机上的每个文件。安全性很差。
Deleet '16
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.