Apache HTTP Server 2.2には、素晴らしいメッセージを表示し、複数のエラーコードに反応し、各エラーコードに関する追加情報を表示するErrorDocument PHP CGIスクリプトが構成されています。これは素晴らしい作品です。
ただし、バージョン2.4にアップグレードした後はもう実行されません。代わりに、最初の行を含むファイルの完全なソースコードが表示されます。下記をご覧ください。どうなりますか?
構成は非常に簡単です。
ErrorDocument 401 /cgi-bin/error.cgi
ErrorDocument 403 /cgi-bin/error.cgi
ErrorDocument 404 /cgi-bin/error.cgi
ErrorDocument 500 /cgi-bin/error.cgi
ファイルは正しいユーザーとグループによって所有され、実行可能です。次のようになります。
#!/usr/bin/php-cgi
<?
$errorCode = $_SERVER['REDIRECT_STATUS'];
$reqUrl = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
...
アクセスログには、500や403などのエラーコードを含む期待されるエントリが含まれています。エラーログには、制限されたディレクトリからクライアントが拒否されたことがわかります。これは予想される現象でもあります。
しかし、間違った文書ファイルがまったく実行されないのはなぜですか?
Ubuntu 14.04のApacheバージョンは2.2.x〜2.4.7です。
修正する:conf-enabled/serve-cgi-bin.conf が有効になっています。これは私のVirtualHost設定の一部です。
<VirtualHost 1.2.3.4:80 [1:2:3::4]:80>
ServerName example.de
ServerAlias www.example.de
DocumentRoot /var/www/web001
ErrorDocument 401 /cgi-bin/error.cgi
ErrorDocument 403 /cgi-bin/error.cgi
ErrorDocument 404 /cgi-bin/error.cgi
ErrorDocument 500 /cgi-bin/error.cgi
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xhtml+xml application/x-javascript text/
SuexecUserGroup web001 webusers
ScriptAlias /cgi-bin/ /var/www/web001/cgi-bin/
AddHandler fcgid-script .php
FCGIWrapper /var/www/web001/cgi-bin/php-fcgi .php
<Directory "/var/www/web001">
Options +Includes +ExecCGI
</Directory>
</VirtualHost>
答え1
以前の基本構成と新しい基本構成を詳細に比較したところ、cgidモジュールは含まれなくなりました。有効にすると、エラーCGIページは期待どおりに動作します。他のCGIページもうまくいかないと思いますが、頻繁に使用していないので気付いていませんでした。これがUbuntu固有の変更であるかどうか、または現在のApacheインストールでCGIが有効になっていないかどうかはわかりません。
クイック修正は次のとおりです。
a2enmod cgid
その後、Apacheを再起動します。