472

I get this error when trying to access localhost via a browser.

AH01630: client denied by server configuration

I checked my site folder permissions using:

sudo chmod 777 -R *

Here is my configuration file:

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

4

30 回答 30

829

如果您使用的是 Apache 2.4

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

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

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

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

新指令是Require

2.2 配置:

Order allow,deny
Allow from all

2.4 配置:

Require all granted

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

于 2013-10-25T11:37:55.767 回答
313

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

更新

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

命令允许,拒绝

于 2013-11-13T10:32:32.153 回答
40

Double check that the DocumentRoot path is correct. That can cause this error.

于 2013-11-02T08:34:36.767 回答
26

我做了 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>
于 2014-09-10T14:08:38.453 回答
13

这让我疯狂了一天半,但如果所有其他解决方案都尝试不成功,我找到了解决方案。

这是针对 macOS 的。

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

那时我立即停止收到 403 错误,一切都开始按预期工作。奇怪的是我什至不必重新启动 apache 它就可以工作,我想当我去我的本地主机时它会自行重新启动,老实说我不知道​​,但我想问题是使用 apachectl restart 时 Apache 实际上没有重新启动,或者停止或开始。希望这可以帮助某人。

于 2015-01-15T22:24:46.770 回答
10

问题出在 VirtualHost 但可能不是

要求所有授予

确认您的配置正确,这是正确的示例 在此处输入图像描述

于 2017-08-25T07:18:56.203 回答
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>

您所要做的就是将 MainProjectFolderName 替换为您的确切 ProjectFolderName。

于 2018-10-03T04:36:00.210 回答
4

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

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

httpd.conf文件中。就这些。

于 2016-04-05T06:29:34.070 回答
4

对我来说,所有提出的解决方案都行不通。这会有所帮助,如果您使用 cgi、fastcig 或 fpm 作为代理,您必须在 vhost 中添加一个位置以避免此问题。这允许 404 成为直通代理。

<Location />
require all granted
</Location>
于 2020-06-15T15:52:27.580 回答
4

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

我通过 vagrant vm 中的食谱安装了 Apache/2.4.7 (Ubuntu)。

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

我做了两个改变来完成它

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

然后最后我刚刚启动了vm ..

于 2015-12-08T18:39:30.133 回答
3

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

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

source /etc/apache2/envvars

然后尾随观察...

tail -f ${APACHE_LOG_DIR}/error.log
于 2013-08-23T00:39:56.223 回答
3

对我来说,我实际上已经根据 2.4 标准更新了 Allow 和 Deny 规则。

Require all granted

但是,这仍然导致我收到相同的 AH01630 错误。我找到了另一个线程,它建议重新安装 apache2。不知何故,这奏效了!如果有人愿意解释原因,那将很有帮助。

归功于:AH01630:客户端被服务器配置拒绝,但需要设置所有授予(Apache 2.4,CentOs)

于 2019-11-02T20:57:06.667 回答
3

如果您在 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 服务并重试。

于 2019-05-16T08:15:36.753 回答
2

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

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

在每个人都对我“安全”之前,在我的具体情况下,这不是安全问题。

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

于 2019-08-17T05:58:42.060 回答
2

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

于 2019-03-29T21:41:05.997 回答
2

这让我发疯了。终于找出问题所在:我使用错误日志的直接路径,它们是错误的。

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

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

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
于 2016-09-07T20:00:26.667 回答
2

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

如果此页面上的其他答案都没有为您工作,那么这就是我在挣扎了几个小时后遇到的问题。

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

我可以看到/var/log/apache2/error_log访问/Users/jwork/Sites/被阻止。但是,我被允许通过http://localhost/. 这表明我无权查看该~jwork用户。但据我所知ps aux | egrep '(apache|httpd)'lsof -i :80Apache 正在为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
于 2019-02-21T15:11:05.343 回答
1

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

sudo a2enmod cgi
于 2018-07-19T11:53:08.427 回答
1

因为这个线程是搜索提到的错误时弹出的第一件事我想添加另一个可能导致这个错误的原因:你可能有mod_evasive活动并且看到这个错误的客户端只是超过了你在你的配置中配置的限制mod_evasive.conf

如果您突然为以前没有问题且其他没有任何改变的客户突然收到此错误,则这尤其值得调查。

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

于 2020-01-08T12:06:32.680 回答
1

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

此外,有时以 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
于 2016-11-04T14:39:50.493 回答
1
...
<IfVersion < 2.4>
   Order allow,deny
   Allow from all
</IfVersion>
<IfVersion >= 2.4>
   Require all granted
</IfVersion>
...
于 2022-01-31T20:58:49.310 回答
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
于 2017-06-22T10:07:06.097 回答
0

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

于 2018-07-16T22:36:33.703 回答
0

获取问题的解决方案,需要在 apache2.conf 文件中更改它才能工作,/etc/apache2/apache2.conf 中的旧代码

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

改变成

 <Directory /var/www/>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
    </Directory>

之后,为了让 Apache 理解重写规则,我们首先需要激活 mod_rewrite。它已经安装,但在默认的 Apache 安装中被禁用。使用 a2enmod 命令启用模块:

$ sudo a2enmod rewrite

这将激活模块或提醒您该模块已启用。要使这些更改生效,请重新启动 Apache。

$ sudo systemctl restart apache2

它最终对我有用。

于 2021-08-16T03:37:08.283 回答
0

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

RewriteRule /some_image.png /media/some_other_location.png

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

于 2018-05-10T01:27:50.390 回答
0

我花了一些时间才让它在我自己的 FreeBSD 服务器上运行..

  • 自由BSD 13
  • 阿帕奇 2.4
  • 蟒蛇 3.8
  • 让我们加密

..但最终我想出了一个有效的虚拟主机:

<VirtualHost *:443>

    ServerName mysite.mydomain.com
    DocumentRoot "/usr/local/www/apache24/data/mysite

    WSGIDaemonProcess mysite python-path=/usr/local/www/apache24/data/mysite/venv/lib/python3.8/site-packages/
    WSGIProcessGroup mysite
    WSGIScriptAlias / /usr/local/www/apache24/data/mysite/core/wsgi.py

    SSLEngine on
    SSLCertificateFile "/usr/local/etc/letsencrypt/live/mysite.mydomain.com/cert.pem"
    SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/mysite.mydomain.com/privkey.pem"
    SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/mysite.mydomain.com/fullchain.pem"

    <FilesMatch "\.(cgi|shtml|phtml|php|py)$">
        SSLOptions +StdEnvVars
    </FilesMatch>

    BrowserMatch "MSIE [2-5]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0

    CustomLog "/usr/local/www/apache24/data/mysite/log/py-ssl.log" \
        "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    CustomLog "/usr/local/www/apache24/data/mysite/log/py-access.log" combined
    ErrorLog "/usr/local/www/apache24/data/mysite/log/py-error.log"

    <Directory "/usr/local/www/apache24/data/mysite">
        AllowOverride All
        Options +ExecCGI
        Require all granted
        Allow from all
    </Directory

</VirtualHost>
于 2021-11-25T07:29:09.977 回答
0

如果这有助于像我一样在谷歌上搜索的任何人,我在尝试访问我的服务器上的 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 文件夹中找到了一个我不知道的 .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 文件,以防万一发生这种汤姆愚弄,导致您无法访问该文件。

于 2019-06-10T06:27:53.620 回答
0

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

作为记录,我的特定重写规则是:

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

此规则 [F] 包含以“.”开头的所有内容。但是.trusted,感谢正则表达式的魔力“?!” 否定。

于 2019-11-23T17:18:30.070 回答
0

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

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

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

于 2018-07-03T19:36:39.220 回答
0

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

如果请求的路径是/home/user-foo1bar/www/myproject/后面的匹配器将不匹配

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

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

于 2018-02-16T07:00:12.830 回答