Python CGI mit Apache unter Linux = HTTP 500

Probleme bei der Installation?
Antworten
to.ni

Hallo Forum,

habe unter Linux einige Probleme ein Python-CGI zum laufen zu bringen. Immer wenn ich das Skript ausführen will erhalte ich die Fehlermeldung 500 (Internal Server-Error):

The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, name@domain.de and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


Im Error-Log steht folgendes:
Premature end of script headers: /.../hello.py

Zum Skript:
Eigentlich nur Standard, wie es überall zum testen verwendet wird:

Code: Alles auswählen

#!/usr/bin/python2.2

print "Content-type: text/html"
print
print "<h1>hello world</h1>"
Ich habe den Verdacht, dass die print-ausgaben nicht an den Apache übergeben werden, denn wenn ich ein leeres skript ausführe (enthält nur den Pfad zum Interpreter) bekomme ich die selbe Fehlermeldung.

Auf meinem W2K-System mit Apache funktioniert das test-skript (mit angepasstem Interpreter-Pfad natürlich).

Hoffe ihr könnt mir helfen, da ich bei google und groups noch keine brauchbaren ergebnisse gefunden habe.

mfg

ps. auf Konsole ausgeführt funktioniert das skript ohne probleme...
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Kann es vieleicht sein, das der User/Gruppe unter dem apache läuft, nihct auf Python zugreifen darf?

MfG
Andreas
oenone
User
Beiträge: 75
Registriert: Mittwoch 27. August 2003, 14:39
Wohnort: 49°17'28N, 8°15'57E
Kontaktdaten:

liegt dein python ueberhaupt in /usr/bin ? bei mir z.b. liegt es in /usr/local/bin...
laeuft dein apache in einem jail oder chrooted ?

auf bald
oenone
to.ni

Also zunächstmal danke für eure Antworten!
Unter welchem UserKonto der Apache läuft muss ich noch prüfen (kling aber plausiebel...)

Der Pfad stimmt (in usr/local/bin/ ist nichts für python, auch keine links)

Sorry, aber mit jail oder chrooted kann ich nix anfangen...

thanks und mfg
delta-c
User
Beiträge: 29
Registriert: Montag 9. September 2002, 17:00
Wohnort: Berlin
Kontaktdaten:

Füg mal als zweite Zeile

Code: Alles auswählen

import cgi
ein. Wahrscheinlich fehlt einfach nur das CGI-Modul.

Beste Grüße,
Kai
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Das muss auch ohne CGI-Modul gehen, da das nur dafür da ist, eventuelle Formulardaten auszuwerten. Aber wie und warum kann ich auch nicht helfen, mit dem Apache hab ich mich noch nie beschäftigt...
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Hast du auch in der httpd.conf die Endung *.py als CGI Script eingetragen?
ändere mal die Endung in *.cgi
Und schau ob es dann läuft?

MfG
Andreas
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

ich hatte das problem auch.

1. auch die erste zeile genau

2. schreibe print "Content-Type: text/html \n\n"

sonst gibt es einen fehler.

und benne die dateien in .py um, anstatt .cgi und änder dies (envt.) in der httpd.conf um


bis denne

DER Olf
to.ni

Hallo wiedermal,

also inzwischen lässt echt die Motivation nach...

nach einigen (vielen) Stunden von Recherchen im WWW geht nach wie vor nix mit python.

CGI: Der Code (/usr/local/httpd/htdocs/test/test.py)

Code: Alles auswählen

#!/usr/bin/python

import cgi

print "content-type: text/html\n\n"
print "<h1>hallo welt</h1>"
mit dem Konfigurations-File

Code: Alles auswählen

<Directory "/usr/local/httpd/htdocs/test">
    AddHandler python-program .py
    PythonHandler test
    PythonDebug On
</Directory>
führt zu einem "403 - Forbidden".
Im error_log steht zu lesen "Options ExecCGI is off in this directory /usr/local/httpd/htdocs/test/test.py"

Auch die Konfigurations-Erweiterung

Code: Alles auswählen

<Directory "/usr/local/httpd/htdocs/test">
    AddHandler python-program .py
    PythonHandler test
    Option +ExecCGI
    PythonDebug On
</Directory>
oder

Code: Alles auswählen

<Location "/usr/local/httpd/htdocs/test">
    Option +ExecCGI
</Location>
ändert nichts daran.

Auch die Verwendung des Modules funktioniert nicht...
Folgender Code (in einem beliebigen Verzeichnis in /usr/local/htdocs/httpd/*/*.py)

Code: Alles auswählen

from mod_python import apache

def handler(req):
    req.write("Hello World!")
    return apache.OK
zeigt nur den Quellcode wieder an.

Was ich noch nicht geschaft habe:
Das Python-Skript in das cgi-bin Verzeichnis zu legen. D.h. Es reinzulegen ist ja einfach, aber es dann aufzurufen funktioniert nicht, zumindest weiß ich nicht wie. Das cgi-bin befindet sich auf gleicher höhe wie das htdocs-Verzeichnis und nicht darin... also
/usr/local/httpd/htdocs
/usr/local/httpd/cgi-bin

(Verschiedene Dateiendungen haben ebenfalls nichts gebracht (.py .cgi .shtml))

Ich verwende SuSE Linux 8, Apache 1.3.23, Python 2.2 (auch mit Python_Module [installiert und automatisch von Yast eingebunden, wird also beim Apachestart aktiviert])

Oben genannte Hilfen hab ich soweit probiert, aber wie gesagt nix funktioniert.

Bin für jede Hilfe Dankbar, weil ich bisher die Hoffnung noch nicht aufgegeben habe, edlich mal was anderes als PHP zu programmieren...

mfg
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!
to.ni hat geschrieben:Bin für jede Hilfe Dankbar,
Ich hab' mal eben auf meinem Linux-Rechner den Apache installiert (hatte ich zu meiner Verwunderung noch gar nicht). SuSE 8.2 Prof, Apache 1.3.27-38 (von den SuSE-CDs), Python 2.3
Vorgehen für eine Minimallösung:
- Apache installiert (minimal, also auch ohne mod_python) und gestartet ohne jegliche Änderung irgendwelcher Konfig.-Dateien
- im automatisch erzeugten cgi-bin-Verzeichnis (/srv/www/cgi-bin) Dein Python-Skript erzeugt mit den Rechten "rwxr-xr-x" (Deine Fehlermeldung aus dem ersten Posting weist meines Erachtens auf fehlende Ausführungsrechte hin)
- im Webbrowser mit "http://192.168.1.97/cgi-bin/test.py" das CGI-Skript erfolgreich ausgeführt
Das funktioniert also.
Gehen denn die meist im cgi-bin-Verz. installierten Perl-Beispiel-Skripte? Zur Not machst Du nochmal tabula rasa (Apache neu installieren) und versuchst, meine Schritte nachzuvollziehen.
Jan
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

das cgi-bin verzeichnis sollte in htdocs liegen.
htdocs beinhaltet ja das was im browser als "index of/" (oder so) angezeigt wird.
also erstmal den ordnier cgi-bin in htdocs und dann dein script test.py in cgi-bin.
to.ni

Moing, moing und Thanks für eure Beiträge!

Zum Apache: Ich hab das orginal-conf-File nach der installation gesichert und eben wieder hergestellt (sollte ja einem neu-installiertem apache gleichkommen...)

Zum cgi-bin: Ich hab mehrere Files getestet (*.pl und *.cgi) die einzigen, die, zumindest keinen Fehler anzeigten, waren sdbsearch_de.cgi (zeigte HTML-Seite) und gencontent.pl (lieferte ein leeres Dokument). Andere Files (meinst mit Endung .pl) Lieferten den Fehler 500 (Internal Server Error). Die Fehler sind laut error_log ziemlich unterschiedlich und meist irgendwelche Skript-Fehler...

So, jetzt also mal Python-File ins cgi-bin kopiert. Klappt leider auch nicht. Ich bekomme wieder den (aus dem ersten Beitrag bekannten) 500 (Internal Server Error). Hier ist jetzt allerdings das error_log interesant:

Code: Alles auswählen

[error](2)No such file or directory: exec of /usr/local/httpd/cgi-bin/test.py faild
[error] Premature end of script headers: /usr/local/httpd/cgi-bin/test.py
Diese Fehlermeldungen gehören zusammen und die zweite beruht auf der ersten, soweit ist mir das klar... Aber das File exsistiert ja in cgi-bin (mit voller Berechtigung übrigens...) und Der Pfad zum Python-Interpreter im File stimmt auch (habs mal mit python2.2 probiert, ändert aber nichts).

Das cgi-directory müsste eigentlich stimmen, da (immerhin 2) andere Skripte problemlos ausgeführt werden können.

tja, wem jetzt noch was einfällt...
schönen tag noch... ;-)
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!
to.ni hat geschrieben:

Code: Alles auswählen

[error](2)No such file or directory: exec of /usr/local/httpd/cgi-bin/test.py faild
[error] Premature end of script headers: /usr/local/httpd/cgi-bin/test.py
Ich habe die Fehlermeldung nur reproduzieren können, wenn ich einen ungültigen Pfad zum Interpreter angab. Da muss also der Hund begraben sein.

Noch eine Mutmaßung: Stammt das Script vom Windows-Rechner? Unter Umständen hast Du noch die DOS-Zeilenenden (\r\n) im Script. Bei cat -v test.py müsste dann an den Zeilenenden ein ^M erscheinen. Und das Programm /usr/bin/python^M findet dann der Apache nicht. Mit dos2unix kann man die ^Ms entfernen.
Jan
to.ni

JEEEAAAHUUUU! :P

das mit den zeilenumbrüchen wars... tja, so tief sind meine linux-kenntnisse dann doch nicht. zwar weiß ich, dass win andere zeilenumbrüche macht als unix aber da dran hab ich da auch nicht mehr gedacht.

Aber wenn man die Dateien mit cat -v file konvertiert, klappts auch mit dem cgi-bin :lol:

also danke, danke, danke... (motivation ist schlagartig wieder da)
Antworten