Я не из мира Perl, поэтому кое-что из этого является новым для меня. Я использую Ubuntu Hardy LTS с установленными пакетами apache2 и mod_fcgid. Я бы хотел, чтобы MT4 работал под fcgid, а не под mod-cgi (похоже, он работает нормально с обычным CGI).
Я не могу заставить даже простой скрипт на Perl работать под fcgid. Я создал простое приложение «Hello World» и включил код из этого предыдущего вопроса , чтобы проверить, работает ли FCGI.
Я назвал свой скрипт HelloWorld.fcgi (в настоящее время fcgid настроен на обработку только файлов .fcgi). Код:
#!/usr/bin/perl
use FCGI;
print "Content-type: text/html\n\n";
print "Hello world.\n\n";
my $request = FCGI::Request();
if ( $request->IsFastCGI ) {
print "we're running under FastCGI!\n";
} else {
print "plain old boring CGI\n";
}
При запуске из командной строки он печатает «обычный старый скучный ...» При вызове через HTTP-запрос к apache я получаю 500 внутренних ошибок сервера и выходные данные сценария печатаются в журнал ошибок Apache:
Content-type: text/html
Hello world.
we're running under FastCGI!
[Wed Dec 03 22:26:19 2008] [warn] (104)Connection reset by peer: mod_fcgid: read data from fastcgi server error.
[Wed Dec 03 22:26:19 2008] [error] [client 70.23.221.171] Premature end of script headers: HelloWorld.fcgi
[Wed Dec 03 22:26:25 2008] [notice] mod_fcgid: process /www/mt/HelloWorld.fcgi(14189) exit(communication error), terminated by calling exit(), return code: 0
Когда я запускаю .cgi-версию того же кода, она работает нормально. Любая идея, почему вывод сценария идет в журнал ошибок? Конфигурация Apache является конфигурацией по умолчанию mod_fcgid plus, в директиве VirtualHost:
ServerName test1.example.com
DocumentRoot /www/example
<Directory /www/example>
AllowOverride None
AddHandler cgi-script .cgi
AddHandler fcgid-script .fcgi
Options +ExecCGI +Includes +FollowSymLinks
</Directory>