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 本身的限制?有没有办法找出/解决这个问题?我会很感激一些建议。
嗯,马上想到的一点是您的<Directory>
部分至少缺少一个关键指令——您需要在其中添加一个Options ExecCGI
指令。您还应该添加一个显式的AllowOverride all
(或none
)指令。 Order
和 Allow
也已弃用 - 如果您使用 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.2httpd.conf
,它将起作用。但是,如果您执行 2.4 的新安装并将您的配置基于默认的 2.4
httpd.conf
,Allow
指令将不起作用,因为默认***部分使用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
指令将不起作用,因为默认的*** <Directory />
部分使用Require all denied
指令而不是 Deny from all
,这优先于树上更高的任何后续 Allow
指令。总而言之,如果您要将 Order
/Allow
/Deny
指令迁移到其等效的 Require
s,那么您必须所有这些指令会发现你得到了你没想到的 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 权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章