摘要:无法运行任何最简单的“Hello World”FastCGI脚本,任何请求总是终止为超时。似乎服务器和FastCGI脚本之间没有任何通信(使用动态FastCGI脚本)。apache2 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/dynamic
目录,由www-data
拥有,被限制为存在一个/var/lib/apache2/fastcgi
目录,由www-data
拥有,可读所有者(可读,可写和由www-data
仅访问) - 有存在于
/var/lib/apache2/fastcgi/
目录
FastCGI的相关配置一个inode /插座文件:
目录/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>
我花了几个小时在网上搜索试图了解为什么它不起作用,最后决定放弃并在这里寻求帮助。
欢迎任何指针和检查列表。随时索要任何您可能认为相关或值得检查的遗漏细节。
享受美好的一天。
- 编辑 -
问题更新
在my own reply to my own question,我提到那里的东西正在寻找没有理由突然罚款古怪的案例。后来我发现这只是部分好的。
在同一个虚拟主机中,如果服务器配置完全相同,则某些脚本(它们完全相同(具有完全相同的访问权限))根据其位置而失败。
由于余,这里是什么在站点配置:
<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
所以两个人的FastCGI脚本应该工作一样之一/fcgi-bin
,但他们不这样做,而且当时,他们都不约而同地用一个联接时间终止-out,就像第一次做的/fcgi-bin
一样。
这让我觉得mod_fastcgi
模块(已知bug?else?)可能有问题。到目前为止,这个模块似乎是相当随机的。
- 编辑2 -
第一编辑以上,是我的一个错误:该组是不对的其他脚本,它必须是www-data
,但事实并非如此。所以有些事情是错误的,坚持我给出的答案,那就是试着看看FastCgiConfig
,看看它是否能解决任何问题,或者至少是否能够解决超时问题。
最后它并不总是工作。还有一个问题。看到最新的消息是更新来说明这个新问题。我对自己的问题的回答仅仅是部分内容。 – Hibou57 2013-03-22 08:43:22
最后确定(请参阅第一篇文章)。答案虽然没有说明如何,但确实足以解决这个问题。 – Hibou57 2013-03-22 10:08:25