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

Jie*_*eng 150 apache .htaccess

我正进入(状态

[Tue Apr 24 12:12:55 2012] [错误] [客户端127.0.0.1]客户端被服务器配置拒绝:/ labs/Projects/Nebula/bin /

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

在此输入图像描述

我有vhosts设置,如:

<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>
Run Code Online (Sandbox Code Playgroud)

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

小智 395

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

Require all denied
Run Code Online (Sandbox Code Playgroud)

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

Require all granted
Run Code Online (Sandbox Code Playgroud)

如在

<Directory "your directory here">
   Order allow,deny
   Allow from all
   # New directive needed in Apache 2.4.3: 
   Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

  • 可能还需要在"要求全部授予"之后添加"满足任何" (9认同)

Jie*_*eng 11

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

Allow from 127.0.0.1
Allow from ::1
...
Run Code Online (Sandbox Code Playgroud)


小智 5

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

你想要的是如下内容:

<Directory "/labs/Projects/Nebula/">
  Options All
  AllowOverride All
  <RequireAny>
    Require local
    Require ip 192.168.1
  </RequireAny>
</Directory>
Run Code Online (Sandbox Code Playgroud)

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

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

sudo a2enmod access_compat
Run Code Online (Sandbox Code Playgroud)