Apache/14 CGI/2 Konfiguration/3 Anweisungen
Konfigurationsanweisungen für mod_cgi und mod_cgid
Wie Sie in Abschnitt 14.2.2, CGI in normalen Verzeichnissen aktivieren, erfahren haben, können Sie die Funktionalität von mod_cgi beziehungsweise mod_cgid einsetzen, ohne eine einzige Konfigurationsdirektive dieser Module selbst zu setzen. Für die eigentliche Ausführung von CGI-Skripten sind diese Direktiven auch nicht notwendig; sie konfigurieren vor allem das Logging der CGI-Skripte. In diesem kurzen Abschnitt werden alle Direktiven von mod_cgi und mod_cgid beschrieben.
ScriptLog Pfad der Log-Datei für CGI-Skripte
Modul mod_cgi, mod_cgid Kontext Server, <VirtualHost> Syntax ScriptLog Pfad Standardwert nicht gesetzt
Falls der Pfad relativ angegeben wird, bezieht er sich auf die ServerRoot. Das folgende Beispiel legt eine ScriptLog-Datei mit konventionellem UNIX-Namen im normalen logs-Verzeichnis an:
ScriptLog logs/script_log
Unter Windows würde die Datei dagegen standardmäßig script.log heißen.
Wenn Sie die Direktive ScriptLog setzen, wird eine zusätzliche Log-Datei für CGI-Skriptfehler angelegt. Während im ErrorLog nur eine lapidare einzeilige Fehlermeldung erscheint, wenn ein CGI-Skript einen Fehler enthält, finden Sie hier eine ausführliche Analyse. Das ScriptLog sollten Sie nur zu Debugging-Zwecken während der Entwicklung von CGI-Skripten aktivieren - im laufenden Betrieb kostet seine Verwendung zu viel Performance.
Ein wenig aufpassen müssen Sie mit den Zugriffsrechten für die ScriptLog-Datei: Die Einträge werden von der User-ID vorgenommen, unter der das Skript ausgeführt wird. Der betreffende User benötigt also Schreibrechte an der Log-Datei. Falls sie sich in einem separaten Verzeichnis befindet, können Sie dem CGIBenutzer einfach Schreibrechte für dieses Verzeichnis erteilen. Befindet sie sich dagegen im allgemeinen logs-Verzeichnis, ist dies ein zu großes Sicherheitsrisiko. In diesem Fall sollten Sie die Datei manuell erzeugen und dem CGI-Benutzer nur das Schreiben dieser einen Datei erlauben.
ScriptLogBuffer Maximale Byte-Anzahl des HTTP-Anfrage-Bodys im ScriptLog
Modul mod_cgi, mod_cgid Kontext Server, <VirtualHost>
Syntax ScriptLogBuffer Bytes Standardwert 1024
Bei einem CGI-Skriptfehler, der auf eine HTTP-Anfrage vom Typ POST oder PUT folgt, werden nicht nur die HTTP-Header in das ScriptLog geschrieben, sondern auch der Beginn des Entity-Bodys. Damit dies nicht zu Speicherengpässen führt oder gar für DoS-Attacken missbraucht wird, wird die maximale Anzahl von Bytes des HTTP-Anfrage-Bodys, die in die Log-Datei aufgenommen werden, mit dieser Direktive beschränkt. Beispiel:
ScriptLogBuffer 2048
ScriptLogSize Maximale Größe der ScriptLog-Datei
Modul mod_cgi, mod_cgid Kontext Server, <VirtualHost> Syntax ScriptLogSize Bytes Standardwert 10385760
Ähnlich wie die Größe des einzelnen Eintrags (siehe ScriptLogBuffer) kann auch die Gesamtgröße der ScriptLog-Datei beschränkt werden. Diese Maßnahme schützt ebenfalls vor Festplattenüberlauf sowie vor Angriffen. Beispiel:
ScriptLogSize 20971520 # 20 MByte
ScriptSock Pfadname des UNIX-Domain-Sockets für mod_cgid
Modul mod_cgid Kontext Server, <VirtualHost> Syntax ScriptSock Pfad Standardwert logs/cgisock
Beim Start des Webservers erzeugt mod_cgid automatisch einen zusätzlichen Prozess, in dem die einzelnen CGI-Skripte als Threads ausgeführt werden. Apache kommuniziert mit diesem Prozess über ein UNIX-Domain-Socket. Dies ist eine Pipe-ähnliche, bidirektionale Einrichtung im Dateisystem, die der InterprozessKommunikation dient. In jeder anderen Hinsicht funktioniert sie genau wie ein Netzwerk-Socket.
Apache für CGI-Skripte konfigurieren 14.2
Diese Direktive legt den Pfadnamen des verwendeten UNIX-Domain-Sockets fest. Die Ressource wird mit den Rechten des Benutzers geöffnet, der Apache gestartet hat - in der Regel also root. Achten Sie darauf, dass kein anderer Benutzer Schreibrechte in diesem Verzeichnis besitzt.
Hier ein Beispiel für die Verwendung der Direktive:
ScriptSock /var/run/apache2/cgid.sock