Apache 权限被拒绝

Posted

技术标签:

【中文标题】Apache 权限被拒绝【英文标题】:Apache permission denied 【发布时间】:2012-08-13 02:46:24 【问题描述】:

我刚刚安装了一个新的 Apache 2.4.2,在 windows 上构建了 php fast cgi。

然后我修改了 httpd.conf 添加以下内容:

LoadModule fcgid_module modules/mod_fcgid.so  
FcgidInitialEnv PHPRC "C:/SITE/PHP"
AddHandler fcgid-script .php
FcgidWrapper "C:/SITE/PHP/php-cgi.exe" .php

DocumentRoot "C:/SITE/localhost/www"
<Directory "C:/SITE/localhost/www">
    Order allow,deny
    Allow from all
</Directory>

但是,当我尝试打开我的网站时,它显示:

Forbidden You don't have permission to access / on this server.

任何想法可能是什么问题?

【问题讨论】:

index.php的权限是什么? 好吧,老实说,我不知道。上面的行不是应该允许所有文件吗?对于向服务器发出的任何请求,我都会得到相同的答复:例如 http://127.0.0.1/asdasdasd - 结果相同。 否...允许/拒绝是 apache 是否向客户端提供资源的指令 - 但 apache 仍需要访问权限才能读取文件。将 apache 视为您计算机上的用户...如果您不授予它访问文件的权限,那么它就无法为它们提供服务。 啊哈,我现在明白了。我想知道,我怎样才能给 apache 足够的权限呢?它是否受到某些配置或 Windows 本身的限制?有没有办法找出/解决这个问题?我会很感激一些建议。 嗯,马上想到的一点是您的&lt;Directory&gt; 部分至少缺少一个关键指令——您需要在其中添加一个Options ExecCGI 指令。您还应该添加一个显式的AllowOverride all(或none)指令。 OrderAllow 也已弃用 - 如果您使用 2.4.x,则应使用 mod_authz_host 提供的新 Require 指令 【参考方案1】:

这是正确的做法:(感谢 DaveRandom)

<Directory "C:/SITE/localhost/www">
    Options ExecCGI
    AllowOverride all
    Require all granted
</Directory>

Dave Random 进一步解释:

在对此进行了一些实验后,我发现了使之成为正确答案的细微差别,这是特定于 Apache 2.3+ 的。似乎mod_authz_host 指令优先于mod_access_compat 指令,并且在目录树中一直冒泡。这意味着,如果您从 Apache 2.2 迁移到 Apache 2.4,并且逐字使用您的 2.2 httpd.conf,它将起作用。

但是,如果您执行 2.4 的新安装并将您的配置基于默认的 2.4 httpd.confAllow 指令将不起作用,因为默认***部分使用 Require all denied 指令而不是 @ 987654330@,这优先于树上更高的任何后续Allow 指令。总而言之,如果您将 Order/Allow/Deny 指令迁移到其等效的 Requires 中,那么您必须尝试所有这些指令,否则您会发现您得到了您没有预料到的 403。

【讨论】:

在对此进行了一些实验后,我发现了使它成为正确答案的细微差别,这是特定于 Apache 2.3+ 的。似乎 mod_authz_host 指令优先于 mod_access_compat 指令,并且这会在目录树中一直冒泡。这意味着,如果您从 Apache 2.2 迁移到 Apache 2.4,并且逐字使用 2.2 httpd.conf,它将起作用。 [在下一条评论中继续] 但是,如果您执行 2.4 的新安装并将您的配置基于默认的 2.4 httpd.conf,Allow 指令将不起作用,因为默认的*** &lt;Directory /&gt; 部分使用Require all denied 指令而不是 Deny from all,这优先于树上更高的任何后续 Allow 指令。总而言之,如果您要将 Order/Allow/Deny 指令迁移到其等效的 Requires,那么您必须所有这些指令会发现你得到了你没想到的 403。 @ Anonymous 看来,在我玩过之后(更重要的是,正确地重新阅读手册)Options ExecCGI 不是 mod_fcgid 所必需的,它只有一个对 mod_cgi 的影响。 AllowOverride all 也不需要让它工作 - 但没有它(或至少一个允许某些东西的 AllowOverride 指令)你不能使用 .htaccess 文件。我强烈建议您阅读并理解manual,了解这些指令的作用和可能的值。 是的,当我查看配置时,我还注意到主目录中的 deny from all。感谢您进一步澄清并为此问题的调查和解决方案做出贡献。 我刚刚在 Windows 8.1(64 位)的 Apache 2.4 VC11(来自 Apache Lounge)上安装了 PHP 5.5 VC11 NTS。对我来说,Options ExecCGI 是不同的。没有它,Apache 将不会启动任何 FCGI 进程,它只会返回 403 permission denied。

以上是关于Apache 权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Docker php apache权限被拒绝

Apache 权限被拒绝连接到套接字

Apache上传文件/tmp权限被拒绝

通过 webmin/virtualmin 启动 apache 时权限被拒绝

Apache 说打开文件读取时出错:权限被拒绝

AWS Amazon Linux EC2 实例:apache 用户权限被拒绝写入目录