Sven Wagener: httpd.conf - ScriptAlias Verzeichnisse

Schönen Guten Tag!

Angenommen ich hätte eine (fast leere) httpd.conf Datei (auf einem Linux Apache Server), in der der Vermerk für ein ScriptAlias einem VirtualHost zugeteilt ist.

Nun hätte ich ein CGI Programm, welches nicht auf irgendeinen Interpreter angewiesen ist. Dieses ist in C geschrieben und unter Linux Kompiliert, also ist es eigenständig lauffähig und liegt in dem Script Verzeichnis.

Welche Module müssen geladen werden, bzw. welche Einträge müsste ich noch in die httpd.conf machen, um das Programm laufen lassen zu können?

Mit freundlichen Grüssen,

Sven Wagener.

  1. Hallo

    Welche Module müssen geladen werden, bzw. welche Einträge müsste ich noch in die httpd.conf machen, um das Programm laufen lassen zu können?

    Keine. Gib Deiner Binary die x-Rechte und lege es in einem ge-ScriptAlias-ten Verzeichnis ab, dann ist es aus Sicht des Webservers ein ganz normales CGI-Script/-Programm.

    So lange

    1. Keine. Gib Deiner Binary die x-Rechte und lege es in einem ge-ScriptAlias-ten Verzeichnis ab, dann ist es aus Sicht des Webservers ein ganz normales CGI-Script/-Programm.

      Komm ich mit chmod 755 programmname aus? Oder welche Rechte sind es dann? (Bin nich soo erfahren!) ;-)

      Sven Wagener.

      1. Hallo Sven

        Komm ich mit chmod 755 programmname aus? Oder welche Rechte sind es dann? (Bin nich soo erfahren!) ;-)

        Sven Wagener.

        Ja.

        1. 1. Habe ich das Programm im ScriptVerzeichnis mit gcc Kompiliert.
          2. Dann habe ich die Rechte auf 755 gesetzt

          Aber trotzdem gibt es eine Fehlermeldung:

          Internal Server Error
          The server encountered an internal error or misconfiguration and was unable to complete your request.

          Das Programm wird also gefunden, aber der Server packt das nicht!
          Was ich jetzt noch machen soll, weis ich auch nicht mehr!
          Ich wüsste nicht, was ich noch ändern sollte.

          Sven Wagener.

          1. Hallo!

            Das Programm wird also gefunden, aber der Server packt das nicht!
            Was ich jetzt noch machen soll, weis ich auch nicht mehr!

            Aber ich! Schau ins Error log und lies die Fehlermeldung. Dann versuche, sie zu verstehen. Wenn das nicht klappt, poste die Fehlermeldung hier (bedenke, es koennen mehrere aufeinanderfolgende sein; Du siehst das an der Uhrzeit). Die Kenntnis der httpd.conf wird wahrscheinlich auch weiterhelfen. Stelle sie irgendwo als Textdatei online und poste die URL zusammen mit den Fehlermeldungen.

            So lange

            1. Tue Apr 25 20:24:07 2000 0 p3E9EE6F4.dip0.t-ipconnect.de 4831 /home/sites/site2/xferlog b _ o r admin ftp 0

              Das ist die Zeile, die in der error Log drin war, die nach meinem vergeblichen CGI Test entstand. Viel kann ich da nicht mit anfangen.

              Sven Wagener.
              (Ich hoffe, dass das jetzt die richtige Datei war)

            2. Nun ist die richtige Datei gewesen:

              Fehler im der error Logfile:

              [Wed Apr 26 12:27:46 2000] [error] [client 195.4.251.156] Premature end of script headers: /home/sites/site2/users/weiss/web/_vti_bin/save.swa

              Wenn ich das Programm aud der Kommandozeile ausführe kommt folgender Fehler:

              Segmentation fault (core dumped)

              Eine Ausgabe eines Fehlers ist bei dem Programm nicht gerade unwahrscheinlich, weil das in C geschriebene Programm auf den QUERY_STRING wartet und nun keinen hat.

              Wenn der Quelltext gebraucht wird, dann kannich ihn zuschicken.

              Vuielen Dank, Sven Wagener

              1. Nun ist die richtige Datei gewesen:

                Fehler im der error Logfile:
                [Wed Apr 26 12:27:46 2000] [error] [client 195.4.251.156] Premature end of script headers: /home/sites/site2/users/weiss/web/_vti_bin/save.swa

                Ja, das sieht vertrauter aus. ;-)

                Wenn ich das Programm aud der Kommandozeile ausführe kommt folgender Fehler:

                Segmentation fault (core dumped)

                Dein Programm ist offensichtlich fehlerhaft. Natuerlich ist ein 500er Error die Folge.

                Eine Ausgabe eines Fehlers ist bei dem Programm nicht gerade unwahrscheinlich, weil das in C geschriebene Programm auf den QUERY_STRING wartet und nun keinen hat.

                Die Ausgabe eines Fehlers und ein Segmentation Fault sind aber sehr verschiedene Dinge. Zum Testen kannst Du ja auf der Kommandzeile die QUERY_STRING Variable setzen. Ist es das wirklich, dann frage eben im Programm ab, ob der QS da ist, und wenn nicht, reagiere entsprechend.

                Wenn der Quelltext gebraucht wird, dann kannich ihn zuschicken.

                Stelle ihn lieber irgendwo online, dann koennen ihn auch andere sehen. Ich persoenlich habe momentan nicht sooviel Zeit.

                So lange

                1. Ich habs!

                  1. Ich hatte in der Zeile "Content-type..." das T von Type gross geschrieben.
                  2. hatte ich anschliessend das Programm neu Kompiliert und die Rechte der Datei auf 775 gesetzt
                  3. Dann habe ich dem CGI Verzeichnis die rechte 777 zugewiesen.

                  Ob der letzte Schritt jetzt notwendig war weis ich nicht (Ich hatte ja mit dem ScriptAlias auf dieses Verzeichnis verwiesen), aber es läuft jetzt ja.

                  Was ich nur merkwürdig finde ist, dass das Programm vorher auf meinem heimischen Linux Apache Server einwandfrei lief.

                  Naja. Auf jeden Fall schonmal Danke für die gute Unterstützung!
                  Besonders an Calocybe und Michael Schröpl!

                  Sven Wagener.

                  1. Hallo nochmal!

                    1. Ich hatte in der Zeile "Content-type..." das T von Type gross geschrieben.

                    Sollte egal sein. Header-Namen werden case-insensitive interpretiert, jedenfalls laut HTTP; sicher ist es bei CGI genauso.

                    1. hatte ich anschliessend das Programm neu Kompiliert und die Rechte der Datei auf 775 gesetzt

                    Also zusaetzlich Schreibrechte fuer Deine Group? Unwahrscheinlich, dass es daran lag.

                    1. Dann habe ich dem CGI Verzeichnis die rechte 777 zugewiesen.

                    Will das Programm irgendwelche Dateien schreiben. Dann koennte es das schon sein. (Wenn es keine Schreibrechte hatte, waere ein fopen fehlgeschlagen, NULL-Pointer returned, nicht abgeprueft (?!), schade war's.)

                    Was ich nur merkwürdig finde ist, dass das Programm vorher auf meinem heimischen Linux Apache Server einwandfrei lief.

                    Hast Du etwa von Deinem Rechner die *Binary* auf den anderen Rechner kopiert? Wenn das ein anderer Rechner ist, dann laeuft das dort wohl kaum (andere Maschinensprache).
                    Naja, wenn's nun laeuft...

                    Bye bye

          2. Internal Server Error
            The server encountered an internal error or misconfiguration and was unable to complete your request.

            Führe Dein Binary über die Commandline aus und poste hier die entsprechende Meldung, oder definiere zu Testzwecken ein separates CGI-Log im Apache (http://www.apache.de/docs/mod/mod_cgi.html#scriptlog).
            Es kann alles Mögliche daran schuld sein, daß Dein Programm sich offenbar mit einem Returncode ungleich 0 beendet und damit dem Apache einen Fehler signalisiert.

        2. Komm ich mit chmod 755 programmname aus? Oder welche Rechte sind es dann? (Bin nich soo erfahren!) ;-)

          Es reicht auch "111" (oder im Extremfall sogar "001", wenn Du weißt, daß der Webserver unter einer anderen Kennung läuft als dem Owner der Datei).
          Während der Perl-Interpreter als normales Anwendungsprogramm ausgeführt wird und deshalb zum Lesen eines Perl-Skripts das "read"-Bit braucht, greift der Systemprogrammlader privilegiert auf das Skript zu und braucht nur noch das "execute"-Bit.

          1. greift der Systemprogrammlader privilegiert auf das Skript zu

            sorry - ersetze "Skript" durch "Binary".