fcgid と PHP での 403 Forbidden エラー

fcgid と PHP での 403 Forbidden エラー

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

コードフローに従うと、/usr/lib/cgi-bin の「Require all grant」は、mod_cgi および/または mod_cgid が有効な場合にのみ実行されます。私のケースでは、これらは両方とも無効でした (Debian ではデフォルトで無効になっているため)。

# a2enmod cgi ; a2enmod cgid ; service apache2 restart

問題を解決しました。

答え2

403 は、ScriptAlias 行が欠落していることが原因であることが多いです。たとえば、Location が "/" で、サーバーのルートが /var/my-www/ の場合、ディレクティブの直前にそれを追加します。

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

関連情報