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

3

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:15

2 respostas

2

Seu script de amostra está errado. Ele precisa suportar explicitamente o FastCGI e. g. por meio de fastcgi++ ou do SDK FastCGI oficial.

Mas isso é mais uma pergunta para o StackOverflow.

    
por 28.08.2010 / 08:08
1

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

link
link

FastCGI Specification Compliance

The FastCGI specification is not implemented in its entirety and I've deviated a bit as well resulting in some Apache specific features.

The file descriptors for stdout and stderr are left open. This is prohibited by the specification. I can't see any reason to require that they be closed, and leaving them open prevents FastCGI applications which were not completely ported to FastCGI from failing miserably. This does not mean the applications shouldn't be fixed such that this doesn't occur, but is invaluable when using a 3rd party library (without source code) which expects to be able to write to stderr. Anything written to stdout or stderr in this manner will be directed to the main server log.

    
por 28.08.2010 / 15:55