Como configurar o apache com o fastcgi e um script de teste simples?

4

Já faz alguns dias que estou tentando configurar o fastcgi com o apache em um servidor Kubuntu. Apesar de procurar em todos os lugares, não posso fazê-lo funcionar. Se eu tentar executar o site com o aplicativo cgi, o apache trava e, após o tempo limite, retorna um erro 500.

Aqui está o que eu fiz:

  • Assegurei-me de que o mod_fastcgi está instalado e ativado:

    # 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
    
  • Tanto quanto sei, o fastcgi.conf está configurado corretamente:

    <IfModule mod_fastcgi.c>
      AddHandler fastcgi-script .fcgi
      #FastCgiWrapper /usr/lib/apache2/suexec
       FastCgiIpcDir /var/lib/apache2/fastcgi
    </IfModule>
    
  • Estou a utilizar este script de amostra muito simples para testar o conjunto up:

    #include <iostream>
    using namespace std;
    int main()
    {
            cout<<"Content-type: text/plain"<<endl<<endl;
            cout<<"Hello World!"<<endl;
             return 0;
    }
    
  • eu compilei. Funciona bem a partir da linha de comando.
  • Coloquei-o em uma pasta visível no servidor da Web: link
  • No começo eu recebo: "Proibido. Você não tem permissão para acessar /fcgitest/run.fcgi neste servidor".
  • Eu adiciono um arquivo .htaccess na pasta:

    Options +ExecCGI -Indexes
    
  • E agora, quando tento acessar o endereço de script do meu navegador, recebo o sintoma que descrevi no início: o navegador trava primeiro e, após o tempo limite, recebo um Erro interno de 500 servidores.
  • O erro apache error.log diz:

    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'
    

Parece que a saída está escrita nos logs de erro !! Existe uma configuração de socket ausente, algures?

    
por augustin 28.08.2010 / 03:32

1 resposta

2

Como observado por joschi, CGI! = FastCGI. Um script CGI falharia neste contexto.

link
link

Conformidade com a especificação FastCGI

A especificação FastCGI não está implementada em sua totalidade e eu também me desviei um pouco, resultando em alguns recursos específicos do Apache.

Os descritores de arquivo para stdout e stderr são deixados abertos. Isso é proibido pela especificação. Eu não vejo nenhum motivo para exigir que eles sejam fechados, e deixá-los abertos impede que os aplicativos FastCGI que não foram completamente portados para o FastCGI falhem miseravelmente. Isso não significa que os aplicativos não devam ser corrigidos de modo que isso não ocorra, mas é inestimável ao usar uma biblioteca de terceiros (sem código-fonte) que espera poder gravar em stderr. Qualquer coisa escrita para stdout ou stderr dessa maneira será direcionada para o log do servidor principal .

    
por augustin 28.08.2010 / 15:55

Tags