概要:最も単純な「Hello World」FastCGI スクリプトを実行できず、要求は常にタイムアウトになります。サーバーと FastCGI スクリプト (動的 FastCGI スクリプトを使用) との間に通信がまったくないようです。
環境
- Ubuntu プレサイス (12.04)
- パッケージ
apache2.2-bin
- パッケージ
apache2-mpm-prefork
- パッケージ
libapache2-mod-fastcgi
- パッケージ
libfcgi-perl
- パッケージ
python-flup
- で仮想ホストとして構成された複数のサイト
127.0.0.1
- が所有し、すべて (所有者、グループ、およびその他) が読み取り可能な
/var/lib/apache2/fastcgi
ディレクトリが存在します。www-data
/var/lib/apache2/fastcgi/dynamic
が所有するディレクトリが存在し、所有www-data
者に制限されています (読み取り、書き込み、およびアクセスはwww-data
のみ)/var/lib/apache2/fastcgi/
ディレクトリに inode/socket ファイルが存在する
FastCGI 関連の構成:
ディレクトリはand (が有効)/etc/apache2/mods-enabled/
への参照を保持します。fastcgi.conf
fastcgi.load
mod_fastcgi
このファイルfastcgi.conf
には次のものが含まれています (そのままにしておきます。編集はしていません)。
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
#FastCgiWrapper /usr/lib/apache2/suexec
FastCgiIpcDir /var/lib/apache2/fastcgi
</IfModule>
の関連する構成ファイルに/etc/apache2/sites-enabled/
は次のものが含まれています (FastCGI 固有の構成については他に何もありません)。
<DirectoryMatch /fcgi-bin>
Options +ExecCGI
<FilesMatch "^[^\.]+$">
SetHandler fastcgi-script
</FilesMatch>
</DirectoryMatch>
テスト仮想ホストのテスト マテリアル:
内容が次の が存在しfcgi-bin/test-perl.fcgi
ます (ファイルはすべてのユーザーが実行可能で、所有者とグループが読み取り可能です):
#!/usr/bin/perl
use CGI::Fast qw(:standard);
$COUNTER = 0;
while (new CGI::Fast) {
print header;
print start_html("Fast CGI Rocks");
print
h1("Fast CGI Rocks"),
"Invocation number ",b($COUNTER++),
" PID ",b($$),".",
hr;
print end_html;
}
内容が次の が存在しfcgi-bin/test-python.fcgi
ます (ファイルはすべてのユーザーが実行可能で、所有者とグループが読み取り可能です):
#!/usr/bin/python
def myapp(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello World!\n']
try:
from flup.server.fcgi import WSGIServer
WSGIServer(myapp).run()
except:
import sys, traceback
traceback.print_exc(file=open("errlog.txt","a"))
問題
コマンドラインから実行すると と はどちらも正常に動作しますが、 や などのように呼び出された場合はどれも機能しfcgi-bin/test-perl.fcgi
ないようです。fcgi-bin/test-python.fcgi
http://test.loc/fcgi-bin/test-perl.fcgi
http://test.loc/fcgi-bin/test-python.fcgi
何も起こらず、少し遅れてエラー 500 が発生し、Apache エラー ログには次のような複数のエントリが含まれます。
[<date>] [error] [client <IP>] FastCGI: comm with (dynamic) server "/<…>/fcgi-bin/<script>.fcgi" aborted: (first read) idle timeout (30 sec), referer: <referrer>
[<date>] [error] [client <IP>] FastCGI: incomplete headers (0 bytes) received from server "<…>/fcgi-bin/<script>.fcgi", referer: <referrer>
なぜ機能しないのかを理解するために何時間もかけてウェブを検索しましたが、最終的にはあきらめて、ここで助けを求めることにしました.
任意のポインターとチェック リストを歓迎します。関連性があると思われる、または確認する価値があると思われる詳細が不足している場合は、お気軽にお問い合わせください。
素敵な一日をお楽しみください。
- 編集 -
問題の更新
私自身の質問に対する私自身の返信で、理由もなく突然正常に見えるという奇妙なケースについて言及しました。後で、これは部分的にしか問題がないことを発見しました。
同じ仮想ホストで、まったく同じサーバー構成を使用すると、場所によっては、まったく同じ (およびまったく同じアクセス権を持つ) 一部のスクリプトが失敗します。
残りとして、サイト構成の内容は次のとおりです。
<DirectoryMatch /fcgi-bin>
Options +ExecCGI
<FilesMatch "^[^\.]+$">
SetHandler fastcgi-script
</FilesMatch>
</DirectoryMatch>
以上で、 のスクリプトのみ/fcgi-bin
が FastCGI スクリプトとして扱われます。しかし、別の場所(まだテスト用) もいくつかあり/cgi-bin
ます。この目的のために、次のエントリが含まれています。/
public_html
.htaccess
Options +ExecCGI
AddHandler fastcgi-script .fcgi
したがって、他の 2 つの FastCGI スクリプトは のスクリプトと同じように機能するはずですが、そうではなく、当面は、最初のスクリプトと同様/fcgi-bin
に、常に接続タイムアウトで終了します。/fcgi-bin
これは、モジュールに何か問題があるのではないかと感じさせmod_fastcgi
ます (既知のバグ? 他?)。これまでのところ、このモジュールはかなりランダムに動作しているようです。
-- 編集 2 --
上記の最初の編集は、私の誤りでした。グループは他のスクリプトと間違っていました。そうでなければなりwww-data
ませんでしたが、そうではありませんでした。何かが間違っているので、私が与えた答えに固執してFastCgiConfig
ください。