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