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 上的「要求所有已授予」。就我而言,它們都被禁用了(因為它們在 Debian 中預設已停用)。

# a2enmod cgi ; a2enmod cgid ; service apache2 restart

解決了問題。

答案2

403 通常是因為缺少 ScriptAlias 行。例如,如果位置是“/”且伺服器的根目錄是/var/my-www/,則將其放在緊鄰指令之前:

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

相關內容