wake-up-neo.net

Come configurare Apache con fastcgi e un semplice script di test?

Sono alcuni giorni che sto cercando di configurare FastCGI con Apache su un server Kubuntu. Nonostante la ricerca ovunque, non riesco a farlo funzionare. Se provo a eseguire il sito con l'applicazione cgi, Apache si blocca e dopo il timeout restituisce un errore 500.

Ecco cosa ho fatto:

  • Mi sono assicurato che mod_fastcgi sia installato e abilitato:

    # 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
    
  • Per quanto ne so, fastcgi.conf è configurato correttamente:

    <IfModule mod_fastcgi.c>
      AddHandler fastcgi-script .fcgi
      #FastCgiWrapper /usr/lib/Apache2/suexec
       FastCgiIpcDir /var/lib/Apache2/fastcgi
    </IfModule>
    
  • Sto usando questo molto semplice script di esempio per testare la configurazione:

    #include <iostream>
    using namespace std;
    int main()
    {
            cout<<"Content-type: text/plain"<<endl<<endl;
            cout<<"Hello World!"<<endl;
             return 0;
    }
    
  • L'ho compilato. Funziona bene dalla riga di comando.
  • L'ho inserito in una cartella visibile dal web server: http://127.0.0.1/fcgitest/run.fcgi
  • All'inizio ottengo: "Proibito. Non hai i permessi per accedere a /fcgitest/run.fcgi su questo server.".
  • Aggiungo un file .htaccess nella cartella:

    Options +ExecCGI -Indexes
    
  • E ora, quando provo ad accedere all'indirizzo dello script dal mio browser Web, ottengo il sintomo che ho descritto all'inizio: il browser si blocca prima e dopo il timeout, ricevo un errore del server interno 500.
  • Apache error.log dice:

    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'
    

Sembra che l'output sia scritto nei log degli errori !! C'è una configurazione socket mancante, da qualche parte ??

4
augustin

Come notato da joschi, CGI! = FastCGI. Uno script CGI fallirebbe in questo contesto.

http://127.0.0.1/doc/libapache2-mod-fastcgi/mod_fastcgi.html
http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html

Conformità alle specifiche FastCGI

La specifica FastCGI non è implementata nella sua interezza e ho anche deviato un po ', risultando in alcune funzionalità specifiche di Apache.

I descrittori di file per stdout e stderr vengono lasciati aperti. Questo è proibito dalle specifiche. Non vedo alcun motivo per richiedere che vengano chiuse e lasciarle aperte impedisce alle applicazioni FastCGI che non sono state completamente portate su FastCGI di fallire miseramente. Ciò non significa che le applicazioni non debbano essere riparate in modo tale che non si verifichino, ma è preziosa quando si utilizza una libreria di terze parti (senza codice sorgente) che prevede di poter scrivere su stderr. Tutto ciò che è stato scritto su stdout o stderr in questo modo verrà indirizzato al registro del server principale .

2
augustin