Apache2:'AH01630:服务器配置拒绝客户端'

时间:2013-08-23 00:13:35

标签: server apache2 apache2.4

尝试通过浏览器访问localhost时出现此错误。

AH01630: client denied by server configuration

我使用以下方法检查了我的网站文件夹权限:

sudo chmod 777 -R *

这是我的配置文件:

<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /home/user-name/www/myproject
<Directory />
    Options FollowSymLinks
    AllowOverride all
    Allow from all
</Directory>

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

<Directory  /home/user-name/www/myproject/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride all
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride all
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

27 个答案:

答案 0 :(得分:731)

如果您使用的是Apache 2.4

您必须检查允许和拒绝规则

查看http://httpd.apache.org/docs/2.4/upgrading.html#access

  

在2.2中,访问控制基于客户端主机名,IP地址等   客户请求的特征是使用指令完成的   订单,允许,拒绝和满足。

     

在2.4中,这种访问控制的方式与其他方式相同   授权检查,使用新模块mod_authz_host。

新指令是Require

2.2配置:

Order allow,deny
Allow from all

2.4配置:

Require all granted

另外,请不要忘记在这些更改(# service httpd restart

后重新启动Apache服务器

答案 1 :(得分:294)

对于所有目录,请写Require all granted而不是Allow from all Something like

<强>更新

如果以上操作不起作用,那么也删除下面提到的这一行:

  

订单允许,拒绝

答案 2 :(得分:32)

仔细检查DocumentRoot路径是否正确。这可能会导致此错误。

答案 3 :(得分:21)

我做了与ravisorg向OSX 10.10 Yosemite建议的相同的更改,将Apache升级到版本2.4。以下是添加到http.conf的更改。

<Directory />
    AllowOverride none
    Require all denied
</Directory>

<Directory /Volumes/Data/Data/USER/Sites/>
    AllowOverride none
    Require all granted
</Directory>

答案 4 :(得分:11)

这让我绝对坚持了一天半,但如果所有其他解决方案都尝试失败,我找到了解决办法。

这是针对macOS的。

  • 转到活动监视器(聚光灯搜索:活动)
  • 在活动监视器中搜索httpd,这是Apache服务
  • 选择属于root的那个,然后单击左上角的X将其关闭。

此时我立即停止了403错误,一切都按预期开始工作。奇怪的是我甚至没有重启apache它只是工作,我想当我去我的本地主机时它重新启动,老实说我不知道​​但我想问题是Apache在使用apachectl restart时实际上没有重启,或者停止或开始。希望这有助于某人。

答案 5 :(得分:7)

问题出在VirtualHost中,但可能不是

  

要求全部授予

确认 配置是正确的,这是正确的示例 enter image description here

答案 6 :(得分:4)

在花了几个小时后,我得到了解决。

我在vagrant vm中通过coookbook安装了Apache / 2.4.7(Ubuntu)。

/etc/apache2/apache2.conf文件默认没有<VirtualHost *:80>元素。

我完成了两项修改

  1. 添加了<VirtualHost *:80>
  2. 加入
    选项索引FollowSymLinks
    AllowOverride全部
    允许所有
  3. 然后我终于启动了vm ..

答案 7 :(得分:4)

有没有人想过wamp服务器默认不包含httpd-vhosts.conf文件。 我的方法是删除下面的注释

 conf
  # Virtual hosts
  Include conf/extra/httpd-vhosts.conf
httpd.conf文件中

。 就是这样。

答案 8 :(得分:4)

如果您拖尾错误日志并重新加载页面,您应该会看到有关确切问题的更多信息。

抓住环境变量,以便$ {APACHE_LOG_DIR}实际上有效...

source /etc/apache2/envvars

然后尾巴看着......

tail -f ${APACHE_LOG_DIR}/error.log

答案 9 :(得分:4)

就我而言,

我正在使用macOS Mojave(Apache / 2.4.34)。 /etc/apache2/extra/httpd-vhosts.conf文件中的虚拟主机设置存在问题。添加所需的目录标记后,我的问题就解决了。

要求所有已授予

希望完整的虚拟主机设置结构可以为您节省空间。

<VirtualHost *:80>
    DocumentRoot "/Users/vagabond/Sites/MainProjectFolderName/public/"
    ServerName project.loc

    <Directory /Users/vagabond/Sites/MainProjectFolderName/public/>
        Require all granted
    </Directory>

    ErrorLog "/Users/vagabond/Sites/logs/MainProjectFolderName.loc-error_log"
    CustomLog "/Users/vagabond/Sites/logs/MainProjectFolderName.loc-access_log" common
</VirtualHost>

您要做的所有事情都是用您的确切ProjectFolderName替换MainProjectFolderName。

答案 10 :(得分:2)

这让我发疯了。最后找出了问题所在: 我正在使用错误日志的直接路径,他们错了。

为什么Apache会给出一个模糊(错误)的错误消息?而是使用正确且有用的错误消息,例如:ErrorLog指令的路径“/wrong/path/and/filename.log”无效。

无论如何,要修复以确保您的错误日志指令看起来像这样:

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

答案 11 :(得分:2)

如果在Windows OS的WampServer中使用Apache 2.4。

您需要在记事本中打开 https-vhosts.conf 文件。

C:\wamp64\bin\apache\apache2.4.37\conf\extra\https-vhosts.conf 

如果找不到上述文件。检查下面的截图 Wampserver apacche 2.4 httpd-vhosts

 <VirtualHost *:80>
     ServerName localhost
     DocumentRoot c:/wamp64/www
     <Directory  "c:/wamp64/www/">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

在以上代码中替换

Require local

使用

Require all granted

并保存。重新启动Apache服务,然后重试。

答案 12 :(得分:1)

对我来说,所有建议的解决方案都行不通。如果您将cgi,fastcig或fpm用作代理,则必须在虚拟主机中添加一个位置来避免此问题,这将有所帮助。这允许404成为直通代理。

<Location />
require all granted
</Location>

答案 13 :(得分:1)

因为该线程是搜索提到的错误时弹出的第一件事,所以我想为该错误添加另一个可能的原因:您可能有mod_evasive处于活动状态,并且客户看到此错误只是越过了在您的mod_evasive.conf

中配置的限制

如果您突然为以前没有问题且没有其他任何变化的客户突然遇到此错误,则这是一个值得调查的原因。

(如果是mod_evasive的原因,那么如果客户端只是暂时停止尝试访问该站点,则错误将自行消失;但这可能是您配置的限制太严格的信号)

答案 14 :(得分:1)

对我来说,我实际上已经根据2.4标准更新了“允许”和“拒绝”规则。

Require all granted

但是,这仍然导致我收到相同的AH01630错误。我找到了另一个线程,它建议重新安装apache2。这以某种方式起作用了!如果有人愿意解释原因,那将有所帮助。

信用至:AH01630: client denied by server configuration but require all granted is set (Apache 2.4, CentOs)

答案 15 :(得分:1)

确保包括任何用户特定的配置!

如果此页面上没有其他答案为您工作,这就是我经过数小时挣扎后遇到的问题。

我使用了用户特定的配置,在Sites中将UserDir指定为我的/private/etc/apache2/extra/httpd-userdir.conf。但是,我被禁止访问端点http://localhost/~jwork/

我可以在/var/log/apache2/error_log中看到对/Users/jwork/Sites/的访问被阻止了。但是,我被允许通过http://localhost/访问DocumentRoot。这表明我没有查看~jwork用户的权限。但是据ps aux | egrep '(apache|httpd)'lsof -i :80所知,Apache正在为jwork用户运行,因此我的用户配置显然没有写东西。

给出一个名为jwork的用户,这是我的配置文件:

/private/etc/apache2/users/jwork.conf

<Directory "/Users/jwork/Sites/">
    Require all granted
</Directory>

此配置完全有效。但是,我发现未包含我的用户配置:

/private/etc/apache2/extra/httpd-userdir.conf

## Note how it's commented out by default.
## Just remove the comment to enable your user conf.
#Include /private/etc/apache2/users/*.conf

请注意,这是userdir conf文件的默认路径,但是正如您将在下面看到的那样,它可以在httpd.conf中进行配置。确保启用以下行:

/private/etc/apache2/httpd.conf

Include /private/etc/apache2/extra/httpd-userdir.conf

# ...

LoadModule userdir_module libexec/apache2/mod_userdir.so

答案 16 :(得分:1)

对于Wamp 3(Apache 2.4),除了按照其他答案中的说明将服务器置于联机状态外,还要在虚拟主机文件conf/extra/httpd-vhosts.conf中 你可能需要更换

Require local

Require all granted



如果在httpd.conf你有

,这是适用的
Include conf/extra/httpd-vhosts.conf

答案 17 :(得分:1)

如果你有https主机,那么也不要忘记对ssl配置进行Require all granted更改。

此外,有时将权限检查为apache用户是有用的:

# ps -eFH | grep http # get the username used by httpd
...
apache   18837  2692  0 119996 9328   9 10:33 ?        00:00:00     /usr/sbin/httpd -DFOREGROUND
# su -s/bin/bash apache # switch to that user
bash-4.2$ whoami
apache
bash-4.2$ cd /home
bash-4.2$ ls
bash-4.2$ cd mysite.com
bash-4.2$ ls
bash-4.2$ cat file-which-does-not-work.txt

答案 18 :(得分:0)

使用Ubuntu时,请检查CGI模块是否已启用。如果没有:

sudo a2enmod cgi

答案 19 :(得分:0)

我得到了另一个可能对某人有用的东西。 从PHP 5.6 => 7.0升级后,收到相同的错误消息。我们已经更改了PHP上传设置,并且一旦复制就忘记了更改。 即使我当时没有上传图像,Silverstripe(我们的CMS)也拒绝保存并抛出该错误。增大了图片上传大小,并且可以立即使用。

答案 20 :(得分:0)

问题可能是指令不在<目录>下

https://httpd.apache.org/docs/2.4/mod/mod_authz_host.html#requiredirectives

可以在<目录>,<文件>或<位置>部分以及.htaccess文件中引用该伪指令,以控制对服务器特定部分的访问。可以根据客户端主机名或IP地址来控制访问。

答案 21 :(得分:0)

对于那些像我一样坚持此错误并且从上面没有任何帮助的人:检查error.log中的问题文件夹是否确实存在于您的服务器上。地雷是由Django在错误的位置自动生成的(先被静态根乱成乱,然后是manage.py collectstatic)。不知道为什么不能正确命名错误。

答案 22 :(得分:0)

一个不起眼(刚刚处理过它),但可能,原因是内部mod_rewrite规则,在主配置文件(不是.htaccess)中写入存在于服务器文件系统根目录的路径。假设您的站点中有一个/media目录,并且您重写了以下内容:

RewriteRule /some_image.png /media/some_other_location.png

如果服务器根目录下有/media目录,则会尝试重写(导致访问被拒绝错误),而不是站点目录中的重写,因为文件系统根目录是首先由mod_rewrite检查路径中第一个目录是否存在于您的站点目录之前。

答案 23 :(得分:0)

如果这可以像我一样帮助任何人进行谷歌搜索,则出现此错误消息,试图访问服务器上的SVG文件,例如https://example.com/images/file.svg。其他文件类型似乎还不错,只是SVG失败了。

我搜寻了/etc/httpd个conf文件,并检查了每种require all denied类型的配置,但找不到什么配置在起作用。

我打开LogLevel在VirtualHost配置中进行调试,并且可以看到mod_authz_core日志记录指定了有效的“需要全部拒绝”:

[Mon Jun 10 13:09:54.321022 2019] [authz_core:debug] [pid 23459:tid 140576341206784] mod_authz_core.c(817): [client 127.0.0.1:54626] AH01626: authorization result of Require all denied: denied
[Mon Jun 10 13:09:54.321038 2019] [authz_core:debug] [pid 23459:tid 140576341206784] mod_authz_core.c(817): [client 127.0.0.1:54626] AH01626: authorization result of <RequireAny>: denied
[Mon Jun 10 13:09:54.321082 2019] [authz_core:error] [pid 23459:tid 140576341206784] [client 127.0.0.1:54626] AH01630: client denied by server configuration: /home/blah/htdocs/images/file.svg

通过盲测,我将文件移到了Web根目录的根目录,发现然后可以在https://example.com/file.svg ..上访问它,因此它仅在'images'文件夹中失败。这导致我在我不知道的图像文件夹中找到一个.htaccess文件。

结果证明Zen Cart 1.5带有images / .htaccess文件,该文件具有:

# deny *everything*
 <FilesMatch ".*">
   <IfModule mod_authz_core.c>
     Require all denied
   </IfModule>
   <IfModule !mod_authz_core.c>
     Order Allow,Deny
     Deny from all
   </IfModule>
 </FilesMatch>

 # but now allow just *certain* necessary files:
 <FilesMatch "(?i).*\.(jpe?g|gif|webp|png|swf)$" >
   <IfModule mod_authz_core.c>
     Require all granted
   </IfModule>
   <IfModule !mod_authz_core.c>
     Order Allow,Deny
     Allow from all
   </IfModule>
 </FilesMatch>

这很烦人,我希望这可以提醒其他人在文件系统的每个级别检查.htaccess文件,以防万一出现这种情况时您无法访问该文件汤姆笨蛋继续。

答案 24 :(得分:0)

我实际上通过将目录访问权限添加到:80条目来解决了这一问题。

projectId

在每个人都得到我所有的“安全性”之前,在我的特定情况下,这不是安全性问题。

如果您使用的是远程资源,我建议您确保您的CURL请求通过HTTPS / TLS进行传输,然后此目录项在443端口上进行传输。

答案 25 :(得分:0)

除了在其他答案中提到的缺少OrderAllow指令之外,请注意DirectoryMatch指令的非匹配正则表达式也可能导致此错误。

如果请求的路径为/home/user-foo1bar/www/myproject/,则下列匹配器将不匹配

<DirectoryMatch "/home/user-[a-z]+/www/myproject/">
...
</DirectoryMatch>

因此,即使有效的访问配置也可能导致此错误。

答案 26 :(得分:0)

此“错误”实际上是Apache 2.4的新正常行为。就我而言,我有一个非常具体的规则来拒绝访问任何以“。”开头的名称的文件夹或文件,因此我必须为需要这种奇数名称的特定公用文件夹设置例外。

出于记录目的,我特定的重写规则是:

RewriteRule "(?!\.trusted)(^|/)\." - [F]

此规则[F]接受以“。”开头的所有内容。但是.trusted,得益于正则表达式“?!”的魔力否定。