PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wie funktioniert cgi?



Andislack
30.11.02, 23:11
hi!

ich müsste mal einen cgi-counter auf meinem web-server laufen lassen, aber der will irgenwie nicht...
ich habe schon hier im forum gesucht und vieles gefunden, aber es geht nciht. das habe ich bisher gemacht:

LoadModule cgi_module libexec/mod_cgi.so
AddModule mod_cgi.c

ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

<Directory "/usr/local/apache/cgi-bin/">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

# To use CGI scripts:
#
AddHandler cgi-script .cgi

so sollte doch eiegntlich alles funktionieren oder?
wenn ich jetzt aber im browser www.meineadresse.de/counter.cgi aufrufe, dann bekomme ich immer:
500 Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, xyz@xyz.deand 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.

und im error-log steht dann das hier:
[Sat Nov 30 23:01:06 2002] [error] [client 192.168.0.2] Options ExecCGI is off in this directory: /usr/local/apache/htdocs/counter.cgi

warum will der die execcgi option in .../htdocs ??? das script liegt doch in .../apache/cgi-bin/

wo und was muss ich da noch mit dem execcgi einstellen?

ist das richtig, dass man das cgi-script dann direkt nach der domain anspricht? www.domain.de/cgi-script.cgi ?


wenn mir da jemand ein paar grundlegende sachen erklären könnte, wäre nicht schlecht. ich denke da sind eher ein paar denkfehler von mir drinnen... :rolleyes:

danke schonmal und gruss andi

michael.sprick
30.11.02, 23:24
Hi,

also zunächst mal hast du ja einen Alias definiert

>>ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

soll heissen, alles was Du mit www.server.de/cgi-bin/ ansprichst, liegt nicht innerhalb von htdocs, sondern dem alias entsprechend woanders.

Da siehst du dann auch, wie der Aufruf des Scripts lauten muss. Also nicht server/script.pl sondern server/cgi-bin/script.pl.
Im ersten Fall würde dann nämlich nach dem script in htdocs suchen - was dein Log bestätigt.

Als nächstes muss das Script ansich vom Webserver (User:apache?) ausführbar sein. Normalerweise vergibt man hierzu die Rechte 755.

Und dann kommt es natürlich noch auf das Script selber an....Syntax OK?

verve
01.12.02, 00:18
Hi

Also ich musste lediglich

+ExecCGI

bei mir an einer Stelle in der httpd.conf ergänzen, schon lieg cgi einwandfrei!

greetings

verve

Andislack
01.12.02, 09:49
hi!

erstmal danke für eure unterstützung!

wenn ich die option +ExecCGI in meine httpd.conf mit einbaue, kommt diese fehlermeldung beim starten des apaches:
root@Homer:/usr/local/apache/conf# httpd start
Syntax error on line 432 of /usr/local/apache/conf/httpd.conf:
Invalid command '+ExecCGI', perhaps mis-spelled or defined by a module not included in the server configuration

muss ich diese option in eine bestimmte sektion schreiben?


lasse ich die option draussen und rufe www.domain.de/cgi-bin/counter.cgi auf kommt schonmal ne andere fehlermeldung in dem error-log und die gleiche 500 Internal Server Error im browser

[Sun Dec 1 09:30:43 2002] [error] (2)No such file or directory: exec of /usr/local/apache/cgi-bin/counter.cgi failed
[Sun Dec 1 09:30:43 2002] [error] [client 192.168.0.2] Premature end of script headers: /usr/local/apache/cgi-bin/counter.cgi

das script ist ausführbar auch für den user wwwsuexec (mein apache user).

@bilbo
ein versteh ich aber nicht ganz. wieso hast du geschrieben server/script.pl ? und nicht server/script.cgi? .pl ist doch ein perl script oder lieg ich da falsch?
aber wahrscheinlich heisst es .pl oder .cgi je nachdem welches script man vorliegen hat - korrekt?


die option exec fehlt ihm ja für das entsprechende verzeichnis - wie bekomm ich die an?
und premature end of script deutet ja auf ein nicht korrektes script hin.!?
gibts eine möglichkeit zu testen, ob der webserver überhaupt ein cgi-script auführen kann?
so wie z.b. bei php mit phpinfo ?

ich habe leider noch überhaut keine ahnung mit cgi oder pl scripten...

danke schonmal für eure hilfe
gruss andi

verve
01.12.02, 10:05
hi,

natürlich muss das "ExecCGI" an eine Stelle gesetzt werden wo es auch erkannt wird (also wo die Option offensteht)! Du kannst es nicht einfach ans Ende setzten!
Poste mal deine httpd.conf!

greetings

verve

Andislack
01.12.02, 18:16
hi!
hab die httpd.conf mal angehängt, weil es immer so viel zu posten ist...

hab sie nochj in httpd.txt umbenannt, damit das mit dem anhängen klappt
danke andi

verve
01.12.02, 21:35
<Directory "/usr/local/apache/htdocs/manual">
Options Indexes FollowSymlinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>


Setz mal hinter das "MultiViews" noch +ExexCGI!


ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

<Directory "/usr/local/apache/cgi-bin/">
AllowOverride None
Options None
Order allow,deny
# +ExecCGI
Allow from all
</Directory>



Nimm mal das # bei ExecCGI weg oder ergänze bei Options ExecCGI, dann brauchst du das Limit nicht mehr!
Sonst mach nochmal alle ExecCGI die du zum Ausprobieren hinzugefügt hast (falls das der Fall ist), weg!
Ich bin mir jetzt nicht 100% sicher, weil ich das grad nicht testen kann!
Morgen sag ich dir dann mit aller Sicherheit wie es sich gehört!

greetings

edit: Eventuell fällt mir ein, dass die Option noch bei "Document Root" ergänzt werden kann!
Wie gesagt 100% Antwort dann morgen!

Andislack
02.12.02, 08:45
hi!

danke für deine tipps, es läuft so halb...

ich habe die execcgi reingemacht und der apache ist ohne fehlermeldung gestartet...:-)
dann habe ich versucht meinen counter zu starten --> gleiche fehlermeldungen im error-log :-(
habe mal ein kleines helloworld.cgi reingestellt und siehe da, unter www.domain.de/cgi-bin/hello.cgi wird das script einwandfrei ausgeführt.
also liegt es wohl am counter-script, dass es nicht funktioniert!?
hab jetzt schon mehrmals gelesen, dass die scripte noch für unix "vorbereitet" werden müssen und habe deshalb das versucht:
tr -d '\015' < $*
da wird dann das ganze script angezeitg, aber ein anschliessendes starten gibt die gleiche fehlermeldung aus.
wie würde denn der umwandlungs-befehl korrekt lauten?

ich habe dann mal einen anderen counter probiert. im browser die gleiche fehlermeldung, aber wenn ich ihn in der konsole starte klappt es einwandfrei!? - was läuft schief, was fehlt?

tja und zu guter letzt habe ich natürlich virtualhosts (3 stück) und möchte gerne, dass die cgi´s in den einzelnen cgi-bin verzeichnissen der hosts auszuführen sind.
aber erstmal die gundlegenden sachen...

vielen dank andi