Как настроить apache с fastcgi и простым тестовым скриптом?
Уже несколько дней я пытаюсь настроить 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; }
- Я скомпилировал это. Работает нормально из командной строки.
- Я поместил его в папку, видимую с веб-сервера: http://127.0.0.1/fcgitest/run.fcgi
- Сначала я получаю: "Запрещено. У вас нет прав доступа к /fcgitest/run.fcgi на этом сервере".
Я добавляю
.htaccess
файл в папке:Options +ExecCGI -Indexes
- И теперь, когда я пытаюсь получить доступ к адресу скрипта из моего веб-браузера, у меня появляется симптом, который я описал в начале: сначала браузер зависает, а после тайм-аута я получаю 500 Internal Server Error.
Apache error.log говорит:
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'
Кажется, вывод записывается в журналы ошибок!! Где-то отсутствует конфигурация сокета?
2 ответа
Ваш пример сценария неверен. Он должен явно поддерживать FastCGI, например, через fastcgi++
или официальный FastCGI SDK.
Но это больше вопрос для StackOverflow.
Да, как заметил Йоски, 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 таким образом, будет направлено в журнал основного сервера.