Search

Language:  
Search for:

Available article translations:

"500 Interner Serverfehler" erscheint, wenn ich versuche, mein CGI-Skript mittels URL über einen Browser aufzurufen. Was könnte die Ursache sein?

Lösung

1. Überprüfen Sie /etc/httpd/logs/suexec_log oder /var/log/httpd/suexec_log auf Fehler, die beim Versuch auftreten, CGI-Skripts auszuführen. Suexec erfasst Fehler im Zusammenhang mit Berechtigungen und Besitzern.

Stellen Sie sicher, dass der Ordner cgi-bin/ über folgende Berechtigungen und Besitzer verfügt:

drwxr-x--- myuser psaserv cgi-bin

Das Skript selbst muss im Besitz des Domain-FTP-Benutzers sein, aber die Gruppe muss 'psacln' sein:

-rwxr-xr-x myuser psacln script.cgi

Stellen Sie sicher, dass die Berechtigungen für die Skriptdatei und den Verzeichnisbaum (relativ zum Dokument-Root des Servers) auf maximal 755 oder folgendermaßen eingestellt ist: Benutzer: Lesen, Schreiben, Ausführen; Gruppe: Lesen, Ausführen; Andere: Lesen, Ausführen (-rwxr-xr-x).

2. Plesk verwendet eine eigene suexec-Datei, und diese wurde möglicherweise durch die im Apache-Standardpaket enthaltene Originaldatei ersetzt. In diesem Fall müssen Sie sie mit dem folgenden Befehl wiederherstellen:
# /bin/cp /usr/sbin/psa-suexec /usr/sbin/suexec

Wenn SuSe 9.x verwendet wird, sollte /usr/sbin/suexec2 durch die Originaldatei ersetzt werden.
# /bin/cp /usr/sbin/psa-apache2-suexec /usr/sbin/suexec2

Bei Debian-Betriebssystemen verwenden Sie bitte die folgende Kommandozeile:
# /bin/cp /opt/psa/suexec/psa-suexec2 /usr/lib/apache2/suexec2

Einzelheiten zum Aktualisieren von Apache auf dem Plesk-basierten Server finden Sie in Artikel 762.

3. Das Skript kann Windows-Wagenrücklaufzeichen am Ende jeder Zeile enthalten, die nicht entfernt wurden, als Sie die Datei über FTP von der Windows-Arbeitsstation auf den Server hochgeladen haben.

Zeilenenden in Dateien werden auf Windows-Systemen mit ausgeblendeten Wagenrücklauf (CR)- und Zeilenvorschub (LF)-Zeichen, auf Unix-Systemen dagegen nur mit dem LF-Zeichen markiert.

Sie müssen Textdateien im ASCII-Übertragungsmodus aus der Windows-Box hochladen, da in diesem Fall CR- und LF-Zeichen durch LF-Zeichen ersetzt werden. Wenn CGI-Skripte im Binärmodus hochgeladen werden, bleiben die Dateien unverändert; es erfolgt keine Konvertierung. Bei der Ausführung des Skripts werden CR-Zeichen als Teil des Textes erkannt und nicht korrekt interpretiert, wie in folgendem Beispiel:

#!/usr/bin/perlCR
use strict;CR

Sie können den Standard-Übertragungsmodus auch in der Datei /etc/proftpd.conf serverweit auf ASCII festlegen:

DefaultTransferMode ascii

Um bereits hochgeladene Skripts mit CR-Zeichen zu überprüfen und zu korrigieren, verwenden Sie eine der folgenden Methoden:

a) Entfernen Sie CR-Zeichen mit dem Dienstprogramm col:
# cd /home/httpd/vhosts/domain.com/cgi-bin
# col -bx < script.cgi > script2.cgi
# ls -l
total 84
-rw-r--r-- 1 myuser psacln 27683 Jun 14 15:51 script2.cgi
-rwxr-xr-x 1 myuser psacln 25753 Jun 14 11:20 script.cgi
# mv script2.cgi script.cgi
mv: overwrite `script.cgi'? y
# chmod 755 script.cgi
# chown myuser:psacln script.cgi

Bitte verwenden Sie anstelle von myuser den Namen des Skript-Besitzers.

b) Öffnen Sie die Datei im Texteditor pico und speichern Sie sie; dadurch werden CR-Zeichen aus der Datei entfernt.
# pico script.cgi


4. Führen Sie das Skript aus der Kommandozeile aus und überprüfen Sie es auf Fehler.
Beispiele:
 
# cd /home/httpd/vhosts/domain.com/cgi-bin
# ./script.cgi
: bad interpreter: No such file or directory

Überprüfen Sie das Skript, um sicherzustellen, dass der Magic Comment das Perl-Verzeichnis angibt: #!/usr/BIN/Perl und/oder überprüfen Sie, ob am Ende der Zeile #!/usr/bin/perl ein CR-Zeichen steht, wie in Option 3 beschrieben.

oder
# ./script.cgi
String found where operator expected at sc.cgi line 3, near "xcprint """
(Do you need to predeclare xcprint?)
syntax error at sc.cgi line 3, near "xcprint """
Execution of sc.cgi aborted due to compilation errors.

Dieses Beispiel weist darauf hin, dass es in diesem Skript einen Syntaxfehler gibt, der korrigiert werden muss, damit das Skript funktioniert.



FEEDBACK
Was this article helpful?
Tell us how we may improve it.
Yes No