Как настроить 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 таким образом, будет направлено в журнал основного сервера.

Другие вопросы по тегам