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 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 文件时]