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


429

尝试通过浏览器访问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>


1
您是否正在使用新的Apache 2.4?哪个路径会导致该错误?
aadel

12
似乎您需要更新您的配置。看看这里:httpd.apache.org/docs/2.4/upgrading.html#run-time
aadel

5
请查看以下内容:dabase.com/blog/AH01630
ChristianMüller

7
chmod 777即使(仅)仅在示例中使用,这也是一个非常不好的习惯。
Antonis Christofides 2015年

3
chmod 777永远无法解决。
亚伦·

Answers:


770

如果您使用的是Apache 2.4

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

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

在2.2中,使用指令Order,Allow,Deny和Satisfy完成了基于客户端主机名,IP地址和其他客户端请求特征的访问控制。

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

新指令为Require

2.2配置:

Order allow,deny
Allow from all

2.4配置:

Require all granted

同样不要忘记在这些更改(# service httpd restart)之后重新启动apache服务器


2
使用Apache 2.4的OSX 10.10 Yosemite的作品
Matthew Herbst

2
什么配置(即“需要所有已授予”去了哪里?在某些.conf文件中?)
Alexis

1
@Alexis目录(或位置)。查看下一个答案的屏幕截图。
陌生人

2
就我而言,我在DocumentRoot<Directory>路径中都出错。
Roman Grinyov '17

4
需要注意的一件事:如果您在线参考配置,则它们可能同时使用Order allow,deny ...Require all granted。它不会工作。根据您的版本,它只需是其中之一。那就是阻止我起初解决我的问题的原因。
Vishnu Narang

299

对于所有目录,写Require all granted而不是Allow from all 就像是

更新资料

如果上述方法不起作用,则还要删除下面提到的这一行:

订单允许,拒绝


14
我也删除了Order allow,deny线路,为我工作。
kasperd 2014年

注意:在使用HTTPS,配置虚拟主机的端口443,我不得不复制相同CONFIGS <Location /media> Require all granted </Location>default-ssl.conf的被装载我的CSS。(我的问题是登录页面是可访问的,但是没有加载CSS或其他媒体文件...)
yuric

1
使用Apache 2.4的OSX 10.10 Yosemite的作品
Matthew Herbst

7
当有人破坏Apache配置而日志中没有任何输出时,我是唯一讨厌它的人。(嘿男孩,Allow from All已经退休,因为....原因...)
Warren P

谢谢-消除了“允许订单,拒绝订单”的帮助
srvy's

34

仔细检查DocumentRoot路径是否正确。那会导致这个错误。


3
更具体地说,我发现这是我的问题,因为我的DocumentRoot声明中没有斜杠,但是在代码<Directory>块中确实使用了斜杠。我也有一些大小写差异。一旦我将这两个值彼此抄送了副本(不带斜杠),它就可以完美工作。
亚当·塔特尔

如果是这种情况(是的,这里也发生过……),您可以在以下位置找到以下信息apache/logs/error.logAH00112: Warning: DocumentRoot [E:/xampp/htdocs/website/frontend/web] does not exist
Piemol,

不能相信我也可以找到我的错字错误的答案:-)感谢您提出它,我的问题是我的conf文件中的无效路径。
塔赫

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>

11

这绝对让我呆了一天半,但如果所有其他解决方案都没有成功尝试,我就找到了解决方案。

这是针对macOS的。

  • 转到活动监视器(聚焦搜索:活动)
  • 在活动监视器中搜索Apache服务的httpd
  • 选择一个属于根目录的目录,然后单击左上角的X将其关闭。

到那时,我立即停止出现403错误,一切开始按预期工作。奇怪的是,我什至不必重新启动刚刚可用的apache,我想它会在我进入本地主机时重新启动,说实话我不知道,但我想问题是使用apachectl restart时Apache实际上并未重新启动,或者停止或开始。希望这对某人有帮助。


1
经过数小时的浪费时间,这也解决了我的问题。
ever.wakeful 2015年

10

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

要求所有授予

确认您的配置正确,这里是正确的示例 在此处输入图片说明


包括<Directory ...> ... </Directory>对我有用的代码行,因为我使用的是以前在Apache配置中未定义的目录路径。
唐·威尔逊

4

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

抓住环境变量,以便$ {APACHE_LOG_DIR}实际上可以工作...

source /etc/apache2/envvars

然后尾巴看...

tail -f ${APACHE_LOG_DIR}/error.log

5
这是来自日志的错误:“ AH01630:服务器配置拒绝了客户端”
Hazem Hagrass


6
如果您将其添加LogLevel debug到VirtualHost,这是一个很好的建议,因为您将看到诸如“要求全部拒绝:拒绝”和“ <RequireAny>:拒绝”之类的行(即比“服务器配置拒绝的客户端”有用得多,因为它实际上会告诉您哪种配置!)
Darren Cook

4

花了几个小时后,我解决了自己的问题。

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

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

我做了两个更改以完成它

  1. 添加 <VirtualHost *:80>
  2. 添加的
    选项索引FollowSymLinks
    AllowOverride all全部
    允许

然后我终于启动了vm ..


4

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

 conf
  # Virtual hosts
  Include conf/extra/httpd-vhosts.conf

httpd.conf文件中。就这些。


+1这也对我conf/extra/httpd-vhosts.confRequire localRequire all granted
有用,

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。


2

这让我发疯。最终弄清楚了问题所在:我在错误日志中使用了直接路径,但它们是错误的。

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

无论如何,要解决此问题,请确保您的错误日志指令如下所示:

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

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虚拟主机

 <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服务,然后重试。



1

如果您拥有https主机,请不要忘记Require all granted对ssl config 进行更改。

另外,有时以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

1

对于Wamp 3(Apache 2.4),除了按照其他答案所述将服务器置于联机状态之外,还conf/extra/httpd-vhosts.conf
可能需要在Virtual Hosts文件中替换

Require local

Require all granted



如果httpd.conf您有,这适用

Include conf/extra/httpd-vhosts.conf

1

使用Ubuntu时,请检查是否启用了CGI模块。如果不:

sudo a2enmod cgi

需要启用CGI模块。程序终于成功了。
史蒂夫·

1

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

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

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

我可以看到/var/log/apache2/error_log访问/Users/jwork/Sites/被阻止了。但是,我被允许通过来访问DocumentRoot http://localhost/。这表明我没有查看该~jwork用户的权限。但据我可以告诉ps aux | egrep '(apache|httpd)'lsof -i :80,阿帕奇运行的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

1

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


感谢您提醒我要动脑筋,解决问题。+1哈哈
orangecaterpillar

0

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

如果请求的路径是/home/user-foo1bar/www/myproject/以下匹配项,则不匹配

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

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


0

一个晦涩(刚刚处理过)的问题,但是可能的原因,是内部的mod_rewrite规则,该规则在主配置文件(不是.htaccess)中写入到服务器文件系统根目录中的路径。假设您/media的网站中有一个目录,然后重写如下内容:

RewriteRule /some_image.png /media/some_other_location.png

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



0

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


0

如果这可以像我一样帮助任何人在Google上搜索,我都会收到此错误消息,尝试访问服务器上的SVG文件,例如https://example.com/images/file.svg。其他文件类型似乎很好,只是SVG失败了。

我在/etc/httpdconf文件中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”文件夹中失败。这导致我在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文件,以防万一发生这种类型的Tom Foolery时,您无法访问该文件。


0

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

 <Directory "c:/whatever-directory-you-use/">
    AllowOverride All
    Require all granted
</Directory>

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

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


0

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

根据记录,我的特定重写规则是:

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

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


0

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

如果您突然发现以前没有问题且没有其他任何更改的客户端出现此错误,那么这尤其值得调查。

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

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.