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

问题描述 投票:404回答:22

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

server apache2 apache2.4
22个回答
740
投票

如果您使用的是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

另外不要忘记在这些更改后重启apache服务器(# service httpd restart


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操作系统上使用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服务,然后重试。


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

1
投票

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

Require local

Require all granted

如果你在httpd.conf,这是适用的

Include conf/extra/httpd-vhosts.conf

1
投票

Ensure that any user-specific configs are included!

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

我使用了特定于用户的配置,在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

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
投票

问题可能是该指令不在<Directory>下

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

该指令可以在<Directory>,<Files>或<Location>部分中引用,也可以在.htaccess文件中引用,以控制对服务器特定部分的访问。可以根据客户端主机名或IP地址控制访问。


0
投票

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


296
投票

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

更新

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

订单允许,拒绝


0
投票

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

sudo a2enmod cgi

0
投票

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


0
投票

如果这有助于任何人像我一样谷歌搜索,我有这个错误消息试图访问我的服务器上的SVG文件,例如https://example.com/images/file.svg。其他文件类型似乎很好,只是SVG失败了。

我在/etc/httpd conf文件周围寻找并检查了每个require all denied类型的配置,并且无法找到具有此效果的配置。

我将LogLevel转换为VirtualHost配置中的调试,并且可以看到mod_authz_core日志记录指定有一个'Require all denied'生效:

[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正在进行。


32
投票

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


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
  • 选择属于root的那个,然后单击左上角的X将其关闭。

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


7
投票

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

要求全部授予

确认您的配置是正确的,这里是正确的样本enter image description here


4
投票

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

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

source /etc/apache2/envvars

然后尾巴观看......

tail -f ${APACHE_LOG_DIR}/error.log

4
投票

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

我在vagrant 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文件中。就这些。

© www.soinside.com 2019 - 2024. All rights reserved.