PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl unter Apache2



Lord Fnord
22.03.05, 12:55
Hallo Zusammen,

ich habs jetzt endlich mal geschaft meine Apache Userdirs unter FC3 zum laufen zu bringen (lag an den verdammten SELinux Einstellungen) und schon hab ich das nächste Problem.
Der Apache will meine Perlscripte nicht ausführen... habe alles nach den Einstellungen vom CGI-Manual unter www.apache.org genmacht... müsste also richtig sein.
Ich vermute, dass irgendwas mit meiner Perlinstallation nicht richtig ist.
In der Shell kann ich Perlscripte mit
perl scriptXY.pl einwandfrei ausführen. Aber eigentlich müsste man Sie doch auch mit
./scriptXY.pl ausführen können oder? Nur bei mir kommt dann überhaupt keine Ausgabe, auch keine Fehlermeldung. Kann es sein, dass das der Fehler ist? Und wenn ja in welcher Konfigurationsdatei kann man das einstellen/andern. So das der zweite Aufruf klappt?

Vielen Dank schonmal!

marce
22.03.05, 13:41
wie lautet denn die erste Zeile in Deinem Perl-Script?

Lord Fnord
22.03.05, 15:10
Das Script ist das aus dem CGI-Tutorial von www.apache.org


#!/usr/bin/perl

print "Content-type: text/html\n\n";

print "Hello, World.\n";

Ich habe das Script auf einem Linuxrechner in der Uni ausprobiert und da kann man es wie oben beschrieben ausführen (mit ausgabe).

Meine frage ist eigentlich, wo ich unter Linux das gegenstück zu Windoofs Classpath setzen kann, also so, dass das BS weiss, wass es mit ner .pl Datei anzfangen hat... oder lieg ich da jetzt komplett falsch?

alterpinguin
22.03.05, 15:26
also probiere mal Dein Script xyScript.cgi zu nennen und es muss auch mode xecutable sein. Der "AddHandler" wird in der httpd.conf gesetzt, sollte da aber schon drin stehen und dann kannst Du NICHT normalerweise (wenn nicht konfiguriert und das ist nicht der Standard) überall das cgi-Script ablegen, sondern nur in dafür ebenfalls auf eXecutable (in der Apache httpd.conf) gesetzten Verzeichnissen. Das ist normalerweise /cgi-bin und dort probierst Du Dein perl-Script mit Namen "test.cgi" aus. Und schau in das error.log des Apaches Servers in /var/??httpd??/ (Ort wird ebenfalls in der Konfig. festgelegt).

Lord Fnord
22.03.05, 15:43
als test.cgi kommt die selbe Ausgabe...
Wenn ichs über den Apache also im Webbrowser über http://localhost/~christian/test.cgi ausführe bekomme ich nen "Internal Server Error" und in den Apache Logs steht dan dieses:
[Tue Mar 22 16:32:50 2005] [error] [client 127.0.0.1] Premature end of script headers: test.cgi

wenn ich in der shell auführe bekomm ich diese Ausgaben:
[christian@rabauke public_html]$ perl test.cgi
Content-type: text/html

Hello, World.
[christian@rabauke public_html]$ ./test.cgi
[christian@rabauke public_html]$

Gemäss diesem Tutorials: http://httpd.apache.org/docs-2.0/howto/cgi.html
habe ich die chmod Rechte angepasst und suexec benutze ich nicht.

Dies habe ich wie es im oben genannten Tutorial beschrieben ist in meine httpd.conf eingefügt:

<Directory /home/*/public_html>
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
Und da der Apache mir nen Internal Server Error liefert, scheint er ja wenigstens schonmal "versucht" zu haben diese Datei auszuführen, sonst würd ich doch ne 403 Meldung bekommen oder nicht?

Aber meint ihr nicht auch, dass er die Datei mit ./test.cgi genauso ausführen müsste? Ich bin mir fast sicher das dies der Fall sein muss... nur weiss ich leider nicht, wo ich dies Konfigurieren kann...

LKH
22.03.05, 16:39
Hi,

"Premature end of script headers" liegt oft daran, dass die Perlskripte im DOS-Format vorliegen. Nur mal so als Idee ...

LKH

Lord Fnord
22.03.05, 17:28
nee das Script hab ich mit kwrite unter Linux erstellt...
hab mir auch schon von nem kumpel nen script schicken lassen was bei ihm unter SuSE 9.1 mit Apache2 läuft... bei mir kommt da auch ein 'Internal Server Error' hab auch schon verschiedene chmods (666, 775, 755) durchprobiert... immer der selbe Fehler...
und ich hab jetzt mal ne gute Stunde im Netz gesucht und immer nur die Verweise auf Rechte (Chmod), ContetnType, suexec und httpd.conf gefunden. Diese Punkte hab ich auch schon alle zig mal durchgeschaut und es läuft immer noch nicht... :confused:
naja, ich hau mich jetzt mal was vor die Glotze Simpsons gucken und vielleicht hab ich ja in ner Stunde nen Geistesblitz beim Abendessen oder so ;)

Bis denn und danke für die Antworten auch wenns leider nicht geholfen hat....

alterpinguin
24.03.05, 10:17
und in Deinem Beispiel ein direkt ausgeführtes:
./test.cgi
im Verzeichnis gibt keine Ausgabe ?
und nochmal:

teste zuerst Dein Script im Hauptverzeichnis des Webservers und dort im cgi-bin. Wenn Du nicht ganz schlimm an der httpd.conf manipuliert hast, dann sollte dort per
http://localhost/cgi-bin/test.cgi
auch etwas passieren. Der Hinweis mit dem für Dich unsichtbaren Sonderzeichen (CR-LF) in der ersten Zeile wird ebenfalls gerne übersehen. Überprüfe das selbst, das heißt Du sollst selbst tippen und nicht glauben jemand anderes tippt für Dich schon das richtige. Und prüfe auch was mit einfachen selbst erstellten html-Seiten passiert. Wenn Du natürlich unbedingt darauf bestehst, dass es sofort im User-Home-Dir. funktionieren muss, dann musst Du Dir selbst helfen. Prinzipiell hast Du nach Deinen Angaben alles richtig gemacht, nur dann sollte es funktionieren. Du hast auch nicht zufällig per .htaccess im Verzeichnis ganz andere Vorgaben gesetzt (und allow override all als default)?

Lord Fnord
24.03.05, 10:48
es lag an meiner Firewall Konfiguration, wenn ich die komplett abstelle funktioniert alles perfekt, wenn die Firewall an ist, kann ich keine CGI's ausführen und kann keine Verbindungen zu MySQL aufbauen, obwohl ich das in dem grafischen Frontend für die SELinux-Einstellungen erlaubt hatte... an die richtigen Konfig Files für die Firewall traue ich mich noch nicht so ganz... muss mich da erst nochmal schlau machen.
Vorerst hab ich meine Firewall einfach mal ausgestellt, so funktionierts wenigstens...

Trozedem Danke!