it-swarm.com.de

Wie richte ich Apache mit fastcgi und einem einfachen Testskript ein?

Es ist ein paar Tage her, dass ich versuche, fastcgi mit Apache auf einem Kubuntu-Server einzurichten. Obwohl ich überall suche, kann ich es nicht schaffen, zur Arbeit zu kommen. Wenn ich versuche, die Site mit der CGI-Anwendung auszuführen, bleibt Apache hängen und gibt nach dem Timeout einen 500-Fehler zurück.

Folgendes habe ich getan:

  • Ich habe dafür gesorgt, dass mod_fastcgi installiert und aktiviert ist:

    # 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
    
  • Soweit mir bekannt ist, ist fastcgi.conf richtig konfiguriert:

    <IfModule mod_fastcgi.c>
      AddHandler fastcgi-script .fcgi
      #FastCgiWrapper /usr/lib/Apache2/suexec
       FastCgiIpcDir /var/lib/Apache2/fastcgi
    </IfModule>
    
  • Ich benutze dieses sehr einfache Beispielskript , um das Setup zu testen:

    #include <iostream>
    using namespace std;
    int main()
    {
            cout<<"Content-type: text/plain"<<endl<<endl;
            cout<<"Hello World!"<<endl;
             return 0;
    }
    
  • Ich habe es zusammengestellt. Es funktioniert gut von der Kommandozeile.
  • Ich habe es in einem Ordner abgelegt, der vom Webserver aus sichtbar ist: http://127.0.0.1/fcgitest/run.fcgi
  • Zuerst bekomme ich: "Verboten. Sie haben auf diesem Server keine Berechtigung, auf /fcgitest/run.fcgi zuzugreifen.".
  • Ich füge eine .htaccess Datei in den Ordner ein:

    Options +ExecCGI -Indexes
    
  • Und jetzt, wenn ich versuche, über meinen Webbrowser auf die Skriptadresse zuzugreifen, erhalte ich das Symptom, das ich am Anfang beschrieben habe: Der Browser hängt sich zuerst auf und nach dem Timeout erhalte ich einen 500 Internal Server Error.
  • Das Apache error.log sagt:

    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'
    

Es scheint, dass die Ausgabe in die Fehlerprotokolle geschrieben wird !! Fehlt irgendwo eine Socket-Konfiguration?

4
augustin

Wie von joschi bemerkt, CGI! = FastCGI. Ein CGI-Skript würde in diesem Zusammenhang fehlschlagen.

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

Einhaltung der FastCGI-Spezifikation

Die FastCGI-Spezifikation ist nicht vollständig implementiert, und ich habe auch ein bisschen abgewichen, was zu einigen Apache-spezifischen Funktionen geführt hat.

Die Dateideskriptoren für stdout und stderr bleiben offen. Dies ist durch die Spezifikation verboten. Ich kann keinen Grund dafür erkennen, dass sie geschlossen sein müssen, und wenn sie offen bleiben, können FastCGI-Anwendungen, die nicht vollständig auf FastCGI portiert wurden, nicht kläglich fehlschlagen. Dies bedeutet nicht, dass die Anwendungen nicht so repariert werden sollten, dass dies nicht auftritt. Dies ist jedoch von unschätzbarem Wert, wenn eine Bibliothek eines Drittanbieters (ohne Quellcode) verwendet wird, die in der Lage sein soll, in stderr zu schreiben. Alles, was auf diese Weise in stdout oder stderr geschrieben wird, wird an das Protokoll des Hauptservers weitergeleitet .

2
augustin