Уже несколько дней я пытаюсь настроить fastcgi с apache на сервере Kubuntu. Несмотря на поиски повсюду, я не могу заставить его работать. Если я пытаюсь запустить сайт с помощью приложения cgi, apache зависает и по истечении времени ожидания возвращает ошибку 500.
Вот что я сделал:
Я убедился, что mod_fastcgi установлен и включен:
# pwd
/etc/apache2/mods-enabled
# ls -l f*
lrwxrwxrwx 1 root root 30 2010-07-22 10:01 fastcgi.conf -> ../mods-available/fastcgi.conf
lrwxrwxrwx 1 root root 30 2010-07-22 10:01 fastcgi.load -> ../mods-available/fastcgi.load
Насколько мне известно, fastcgi.conf настроен правильно:
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
#FastCgiWrapper /usr/lib/apache2/suexec
FastCgiIpcDir /var/lib/apache2/fastcgi
</IfModule>
Я использую это очень просто образец сценария чтобы проверить настройку:
#include <iostream>
using namespace std;
int main()
{
cout<<"Content-type: text/plain"<<endl<<endl;
cout<<"Hello World!"<<endl;
return 0;
}
Я добавляю .htaccess
файл в папке:
Options +ExecCGI -Indexes
В журнале ошибок apache говорится:
Content-type: text/plain
Hello World!
[Sat Aug 28 09:08:23 2010] [warn] FastCGI: (dynamic) server
"/var/www/fcgitest/run.fcgi" (pid 27758) terminated by calling exit with status '0'
Кажется, вывод записывается в журналы ошибок !! Где-то отсутствует конфигурация сокета ??
Ваш пример сценария неверен. Он должен явно поддерживать FastCGI e. грамм. через fastcgi++
или официальный SDK FastCGI.
Но это скорее вопрос для StackOverflow.
Да, как заметил joschi, CGI! = FastCGI. В этом контексте сценарий CGI потерпит неудачу.
http://127.0.0.1/doc/libapache2-mod-fastcgi/mod_fastcgi.html
http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html
Соответствие спецификации FastCGI
Спецификация FastCGI реализована не полностью, и я также немного отклонился, что привело к появлению некоторых специфических функций Apache.
Дескрипторы файлов для stdout и stderr остаются открытыми. Это запрещено спецификацией. Я не вижу причин требовать, чтобы они были закрыты, и если оставить их открытыми, приложения FastCGI, которые не были полностью перенесены на FastCGI, не потерпят неудачу. Это не означает, что приложения не следует исправлять, чтобы этого не происходило, но это бесценно при использовании сторонней библиотеки (без исходного кода), которая предполагает возможность записи в stderr. Все, что написано в stdout или stderr таким образом, будет направлено в главный журнал сервера..