【问题标题】:Apache: client denied by server configurationApache:客户端被服务器配置拒绝
【发布时间】: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)。谢谢。

标签: apache .htaccess


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    Allow from 127.0.0.1
    Allow from ::1
    ...
    

    【讨论】:

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

    这是我在 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 在什么操作系统上运行?

    【讨论】:

      【解决方案4】:

      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 解决方案。谢谢!!!
      • 即使在更改为要求全部授予后,它仍显示相同的错误访问被拒绝。
      【解决方案5】:

      如果你有

      Allow from All
      

      在 httpd.conf 然后确保我们有

      index.php

      就像 httpd.conf 中的下面一行

      DirectoryIndex index.html index.php
      

      【讨论】:

        【解决方案6】:

        就我而言,关键是:

        AllowOverride All
        

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

        【讨论】:

          【解决方案7】:

          在 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
          

          【讨论】:

            【解决方案8】:

            这段代码对我有用..

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

            希望这对其他人有所帮助

            【讨论】:

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

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-10-22
              • 1970-01-01
              • 2012-01-14
              • 1970-01-01
              • 1970-01-01
              • 2013-08-05
              相关资源
              最近更新 更多