摘要:無法運行任何最簡單的「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