fcgid 和 PHP 出现 403 禁止错误

fcgid 和 PHP 出现 403 禁止错误

我正在尝试在 Apache 2.4、Debian jessie、x64 上配置 php 和 mod_spdy。我已遵循本指南并配置Apache如下其他指南并安装了以下软件包:

libapache2-mod-fcgid
php-cgi
php5-fpm

我现在遇到了 php 应用程序问题:当我尝试打开它们时,出现 403 Forbidden。这是我的 /etc/apache2/conf-enabled/fcgid.conf

<Location />
  AddHandler fcgid-script .php
  Options +ExecCGI
  FcgidWrapper /usr/bin/php-cgi .php
</Location>

我在 /var/log/apache2/error.log 中收到错误

AH01630: client denied by server configuration: /usr/lib/cgi-bin/php5

我尝试添加

Order allow,deny
Allow from all

到 PHP 应用程序 VirtualHost 中,但结果是一样的。为什么我得到 403?

答案1

403 错误消息具有误导性,但正确。查看 /etc/apache2/conf-enabled/serve-cgi-bin.conf 时,我发现:

<IfModule mod_alias.c>
    <IfModule mod_cgi.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>

    <IfModule mod_cgid.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>

    <IfDefine ENABLE_USR_LIB_CGI_BIN>
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Require all granted
        </Directory>
    </IfDefine>
</IfModule>

按照代码流程,只有启用 mod_cgi 和/或 mod_cgid 时,才会执行 /usr/lib/cgi-bin 上的“Require all grant”。在我的情况下,它们都被禁用(因为它们在 Debian 中默认被禁用)。

# a2enmod cgi ; a2enmod cgid ; service apache2 restart

解决了问题。

答案2

403 通常是因为缺少 ScriptAlias 行。例如,如果位置是“/”并且服务器的根目录是 /var/my-www/,请将其放在指令之前:

ScriptAlias  /  /var/my-www/
<Location />
 ...
 ...

相关内容