Apache & CGI funktioniert nur mangelhaft
Chris
- webserver
Hallo,
Ich bin ein wenig am verzweifeln: Ich habe RedHat 7.1 installiert mit Apache und mod_perl. Hab den Apache nun so konfiguriert, das er das macht, was ich haben will. Wenn ich jedoch ein Perl-Script aufrufe, bekomme ich dauernd einen internen Serverfehler. Ausser wenn es was ganz simples ist (z.B. echo "irgendwas" oder der gleichen), dann führt er es sehr wohl aus. Hab zum testen nun einmal ein Formmailer-Skript von Matt's Archiv genommen und eingebunden, aber da ist genau das selbe. Im Log steht leider auch nicht mehr drinnen, als interner Serverfehler.
Habe schon dutzende Docus gelesen, das Inernet durchsucht, das Buch von Oreilly aufgesaugt und die Man-Page vom Mod_perl verschlungen, aber ich komm einfach nicht drauf, was ich falsch gemacht haben könnte. Hab dann auch mal die neueste Version von Apache und mod_perl eingespielt, aber das hat auch nichts gebracht.
Was hab ich vergessen zu beachten?
Wäre echt mega Dankbar, wenn mich wer von der Leitung heben könnte, bevor ich noch total ausflippe :-)
Vielleicht hilft es ja auch, wenn ich einfach einmal die httpd.conf mit reinschreibe:
ServerType standalone ServerRoot "/etc/httpd" Timeout 600 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 30 MinSpareServers 15 MaxSpareServers 30 StartServers 25 MaxClients 250 MaxRequestsPerChild 30 LockFile /var/lock/httpd.lock PidFile /var/run/httpd.pid ScoreBoardFile /var/run/httpd.scoreboard
Listen 80 Port 80 User apache Group apache ServerAdmin root@localhost ServerName localhost DocumentRoot "/var/www/html" ServerSignature On AccessFileName .htaccess UseCanonicalName On HostnameLookups On ErrorLog /var/log/httpd/error_log LogLevel warn IdentityCheck On ServerTokens ProductOnly
LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule env_module modules/mod_env.so LoadModule config_log_module modules/mod_log_config.so LoadModule agent_log_module modules/mod_log_agent.so LoadModule referer_log_module modules/mod_log_referer.so LoadModule mime_module modules/mod_mime.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule status_module modules/mod_status.so LoadModule info_module modules/mod_info.so LoadModule includes_module modules/mod_include.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule dir_module modules/mod_dir.so LoadModule cgi_module modules/mod_cgi.so LoadModule asis_module modules/mod_asis.so LoadModule imap_module modules/mod_imap.so LoadModule action_module modules/mod_actions.so LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule access_module modules/mod_access.so LoadModule auth_module modules/mod_auth.so LoadModule anon_auth_module modules/mod_auth_anon.so LoadModule db_auth_module modules/mod_auth_db.so LoadModule expires_module modules/mod_expires.so LoadModule headers_module modules/mod_headers.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule includes_module modules/mod_include.so <IfDefine HAVE_PERL> LoadModule perl_module modules/libperl.so </IfDefine> <IfDefine HAVE_PHP> LoadModule php_module modules/mod_php.so </IfDefine> <IfDefine HAVE_PHP3> LoadModule php3_module modules/libphp3.so </IfDefine> <IfDefine HAVE_PHP4> LoadModule php4_module modules/libphp4.so </IfDefine> <IfDefine HAVE_DAV> LoadModule dav_module modules/libdav.so </IfDefine> <IfDefine HAVE_ROAMING> LoadModule roaming_module modules/mod_roaming.so </IfDefine> <IfDefine HAVE_SSL> LoadModule ssl_module modules/libssl.so </IfDefine>
ClearModuleList AddModule mod_vhost_alias.c AddModule mod_env.c AddModule mod_log_config.c AddModule mod_log_agent.c AddModule mod_log_referer.c AddModule mod_mime.c AddModule mod_negotiation.c AddModule mod_status.c AddModule mod_info.c AddModule mod_include.c AddModule mod_autoindex.c AddModule mod_dir.c AddModule mod_cgi.c AddModule mod_asis.c AddModule mod_imap.c AddModule mod_actions.c AddModule mod_userdir.c AddModule mod_alias.c AddModule mod_rewrite.c AddModule mod_access.c AddModule mod_auth.c AddModule mod_auth_anon.c AddModule mod_auth_db.c AddModule mod_expires.c AddModule mod_headers.c AddModule mod_so.c AddModule mod_setenvif.c
<IfDefine HAVE_PERL> AddModule mod_perl.c </IfDefine> <IfDefine HAVE_PHP> AddModule mod_php.c </IfDefine> <IfDefine HAVE_PHP3> AddModule mod_php3.c </IfDefine> <IfDefine HAVE_PHP4> AddModule mod_php4.c </IfDefine> <IfDefine HAVE_DAV> AddModule mod_dav.c </IfDefine> <IfDefine HAVE_ROAMING> AddModule mod_roaming.c </IfDefine> <IfDefine HAVE_SSL> AddModule mod_ssl.c </IfDefine>
ExtendedStatus Off
<Directory /> AuthUserFile /etc/httpd/passwd AuthGroupFile /etc/httpd/group Options None AllowOverride None </Directory>
<Directory "/var/www/html"> Options None AllowOverride None Order allow,deny Allow from all </Directory>
DirectoryIndex index.html index.htm index.shtml index.php index.php4 index.php3 index.pl
<Files ~ "^.ht"> Order allow,deny Deny from all </Files>
TypesConfig /etc/mime.types DefaultType text/plain
<IfModule mod_mime_magic.c> MIMEMagicFile conf/magic </IfModule>
ScriptLog /var/log/httpd/script_log
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined LogFormat "%h %l %u %t "%r" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent
CustomLog /var/log/httpd/access_log combined CustomLog /var/log/httpd/referer_log referer CustomLog /var/log/httpd/agent_log agent CustomLog /var/log/httpd/access_log combined
Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory>
IndexOptions FancyIndexing
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/* AddIconByType (IMG,/icons/image2.gif) image/* AddIconByType (SND,/icons/sound2.gif) audio/* AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe AddIcon /icons/binhex.gif .hqx AddIcon /icons/tar.gif .tar AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip AddIcon /icons/a.gif .ps .ai .eps AddIcon /icons/layout.gif .html .shtml .htm .pdf AddIcon /icons/text.gif .txt AddIcon /icons/c.gif .c AddIcon /icons/p.gif .pl .py AddIcon /icons/f.gif .for AddIcon /icons/dvi.gif .dvi AddIcon /icons/uuencoded.gif .uu AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl AddIcon /icons/tex.gif .tex AddIcon /icons/bomb.gif core AddIcon /icons/back.gif .. AddIcon /icons/hand.right.gif README AddIcon /icons/folder.gif ^^DIRECTORY^^ AddIcon /icons/blank.gif ^^BLANKICON^^ DefaultIcon /icons/unknown.gif
ReadmeName README.html HeaderName HEADER.html
IndexIgnore .??* ~ # HEADER README RCS CVS *,v *,t
AddEncoding x-compress Z AddEncoding x-gzip gz tgz
AddLanguage en .en AddLanguage fr .fr AddLanguage de .de AddLanguage da .da AddLanguage el .el AddLanguage it .it
LanguagePriority de en
<IfModule mod_php4.c> AddType application/x-httpd-php .php4 .php3 .phtml .php AddType application/x-httpd-php-source .phps </IfModule>
<IfModule mod_php3.c> AddType application/x-httpd-php3 .php3 AddType application/x-httpd-php3-source .phps </IfModule>
<IfModule mod_php.c> AddType application/x-httpd-php .phtml </IfModule>
AddType application/x-tar .tgz
AddHandler cgi-script .pl
AddType text/html .shtml AddHandler server-parsed .shtml
AddHandler imap-file map
BrowserMatch "Mozilla/2" nokeepalive BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0 BrowserMatch "RealPlayer 4.0" force-response-1.0 BrowserMatch "Java/1.0" force-response-1.0 BrowserMatch "JDK/1.0" force-response-1.0
<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from localhost 192.168.0.1 </Location>
<Location /server-info> SetHandler server-info Order deny,allow Deny from all Allow from localhost 192.168.0.1 </Location>
Alias /doc/ /usr/share/doc/ <Location /doc> order deny,allow deny from all allow from localhost 192.168.0.1 Options Indexes FollowSymLinks </Location>
<IfDefine HAVE_SSL> Listen 443 SSLSessionCache shm:/var/cache/ssl_gcache_data(524288) </IfDefine>
<VirtualHost *:80> ServerName bimmer.at ServerAlias *.bimmer.at ServerAdmin root@localhost DocumentRoot /home/bimchr01/www/public Options +IncludesNOEXEC ErrorLog /home/bimchr01/www/log/error_log TransferLog /home/bimchr01/www/log/access_log CustomLog /home/bimchr01/www/log/common_log vcommon AccessFileName .htaccess ErrorDocument 401 /home/bimchr01/www/error/401.htm ErrorDocument 403 /home/bimchr01/www/error/403.htm ErrorDocument 404 /home/bimchr01/www/error/404.htm ErrorDocument 500 /home/bimchr01/www/error/500.htm
ScriptAlias /cgi/ /home/bimchr01/www/cgi-bin/ <Directory /home/bimchr01/www/cgi-bin> AllowOverride None SetHandler perl-script PerlHandler Apache::Registry Options +ExecCGI </Directory> </VirtualHost>
Hi,
Ich habe RedHat 7.1 installiert mit Apache und
mod_perl.
mod_perl - aha. Interessant.
Wenn ich jedoch ein Perl-Script aufrufe, bekomme
ich dauernd einen internen Serverfehler.
... welcher besagt, daß Dein Skript nicht tut, was es tun soll.
Hab zum testen nun einmal ein Formmailer-Skript
von Matt's Archiv genommen
Eieiei. Keine gute Idee bei mod_perl.
Im Log steht leider auch nicht mehr drinnen, als
interner Serverfehler.
Hast Du ein separates "ScriptLog" eingeschaltet?
Was hab ich vergessen zu beachten?
Mit mod_perl mußt Du viel sauberer programmieren, als wenn Du normale Perl-Skripte über die CGI-Schnittstelle laufen läßt.
Sind alle Variablen deklariert und initialisiert?
Ist Dein Skript mit "perl -w" und "use strict;" ohne Warnungen lauffähig?
Es ist einfach ein Unterschied, ob ein Skript vom normalen Perl-Interpreter immer wieder neu geladen wird, oder ob es über mod_perl resident im Speicher liegt und ggf. noch irgendwelche Daten vorheriger Ausführungen dort herum stehen.
Das alles darf Deinem Skript nichts ausmachen - es muß sich eben darum kümmern, seine Datenstrukturen ordentlich aufzubauen.
mod_perl verzeiht keinerlei Schlamperei.
Vielleicht hilft es ja auch, wenn ich einfach
einmal die httpd.conf mit reinschreibe:
Wenn eines Deiner Skripte mit mod_perl korrekt läuft und andere nicht, dann liegt es ziemlich sicher an den anderen Skripten.
Viele Grüße
Michael
(der es übrigens abenteuerlich findet, daß Du den Apache für Deine Skript-Fehler verantwortlich machst - was machen denn die vielen Betreiber der aktuell 10,4 Millionen aktiven Apache-Sites anders als Du?)
Hallo,
Hab zum testen nun einmal ein Formmailer-Skript
von Matt's Archiv genommen
Eieiei. Keine gute Idee bei mod_perl.
Was gibt es für Alternativen?
Hast Du eine URL, wo ich was runterladen kann, sodass auch die ganzen CGI's laufen, die es im Netz zum saugen gibt?
Im Log steht leider auch nicht mehr drinnen, als
interner Serverfehler.
Hast Du ein separates "ScriptLog" eingeschaltet?
Eigentlich schon, nur eigenartigerweise ist das File nicht vorhanden. Hab im entsprechenden Abschnitt folgende Zeile stehen:
ScriptLog /home/bimchr01/www/log/script_log
Wenn eines Deiner Skripte mit mod_perl korrekt läuft und andere
nicht, dann liegt es ziemlich sicher an den anderen Skripten.
Naja, ich bin leider darauf angewiesen, dass auch Scripte wie von Matt's Script-Archiv und andere laufen müssen.
Wäre Dir sehr dankbar, wenn Du mir sagen könntest, was ich tun bzw. installieren oder ändern muss, damit dies möglich ist?
(der es übrigens abenteuerlich findet, daß Du den Apache für Deine Skript-Fehler verantwortlich machst - was machen denn die vielen Betreiber der aktuell 10,4 Millionen aktiven Apache-Sites anders als Du?)
Ich mache nicht Apache dafür verantwortlich, sondern nur meine "unfähigkeit" auf die richtige Lösung zu kommen, deshlab hab ich ja meine Frage hier gepostet. :-)
Schonmal Danke für Deine Antwort!
Chris
Hoi,
Hab zum testen nun einmal ein Formmailer-Skript
von Matt's Archiv genommen
Eieiei. Keine gute Idee bei mod_perl.
Was gibt es für Alternativen?
Selber schreiben.
Im Log steht leider auch nicht mehr drinnen, als
interner Serverfehler.
Hast Du ein separates "ScriptLog" eingeschaltet?
Eigentlich schon, nur eigenartigerweise ist das File nicht
vorhanden. Hab im entsprechenden Abschnitt folgende Zeile stehen:
ScriptLog /home/bimchr01/www/log/script_log
Sicher, dass das Verzeichnis existiert? Sicher, dass der Apache die
richtigen Rechte hat? Sicher, dass das im richtigen Abschnitt steht?
Wenn eines Deiner Skripte mit mod_perl korrekt läuft und andere
nicht, dann liegt es ziemlich sicher an den anderen Skripten.
Naja, ich bin leider darauf angewiesen, dass auch Scripte wie von
Matt's Script-Archiv und andere laufen müssen.
Warum?
Wäre Dir sehr dankbar, wenn Du mir sagen könntest, was ich tun
bzw. installieren oder ändern muss, damit dies möglich ist?
Nicht mod_perl benutzen.
Die Matt-Wright-Scripte sind groesstenteils in Perl4-Syntax. Und
AFAIK ist die nunmal zu grossen Teilen nicht mod_perl-faehig.
Gruesse,
CK
Hi,
Zuerst mal Danke für Deine Antwort.
Was gibt es für Alternativen?
Selber schreiben.
Naja, eigentlich wollte ich den Server noch in diesem Jahr fertig haben :-)
ScriptLog /home/bimchr01/www/log/script_log
Sicher, dass das Verzeichnis existiert? Sicher, dass der Apache die
richtigen Rechte hat? Sicher, dass das im richtigen Abschnitt steht?
Die anderen Log-Files funktionieren prächtig, nur dieses will er nicht verwenden, stehen tuts dort, wo ich das cgi-verzeichnis einbinde.
Naja, ich bin leider darauf angewiesen, dass auch Scripte wie von
Matt's Script-Archiv und andere laufen müssen.
Warum?
Weil auf dem Server außer mir noch andere Leute Ihren Webspace bekommen sollen, und ich will dann nicht lauter Anfragen bekommen, wieso dieses und jenes nicht geht, weil sonst bin ich den ganzen Tag damit beschäfitgt, den Leuten klar zu machen, dass sie es "anderst" machen müssen und, naja, du weißt was ich meine, oder?
Nicht mod_perl benutzen.
Sondern?
Was verwenden die Provider, die den Kunden cgi anbieten?
Hast Du vielleicht ein paar nützliche Adressen für mich?
Schonmal Danke!
cu Chris
Hoi,
Weil auf dem Server außer mir noch andere Leute Ihren Webspace
bekommen sollen, und ich will dann nicht lauter Anfragen bekommen,
wieso dieses und jenes nicht geht, weil sonst bin ich den ganzen
Tag damit beschäfitgt, den Leuten klar zu machen, dass sie es
"anderst" machen müssen und, naja, du weißt was ich meine, oder?
Dann sagst du ihnen halt, wieso das so ist.
Nicht mod_perl benutzen.
Sondern?
CGI.
Was verwenden die Provider, die den Kunden cgi anbieten?
Na, CGI.
Hast Du vielleicht ein paar nützliche Adressen für mich?
Gruesse,
CK
Hi,
Weil auf dem Server außer mir noch andere Leute Ihren Webspace
bekommen sollen, und ich will dann nicht lauter Anfragen
bekommen, wieso dieses und jenes nicht geht, weil sonst bin
ich den ganzen Tag damit beschäfitgt, den Leuten klar zu
machen, dass sie es "anderst" machen müssen und, naja, du
weißt was ich meine, oder?Nicht mod_perl benutzen.
Dem schließe ich mich an.
mod_perl ist eine Tuning-Maßnahme. Entsprechend sauber programmiert müssen die Skripte dann eben auch sein.
Diese Voraussetzung erfüllen Deine Benutzer nicht.
Sondern?
Was verwenden die Provider, die den Kunden cgi anbieten?
In der Tat eben "nur" CGI, d. h. der Perl-Interpreter wird für jedes Skript neu geladen.
Du kannst aber - wenn Du Dich traust - Deinen Leuten zwei unterschiedliche Endungen für "perl über CGI" und "perl über mod_perl" anbieten, denke ich - und ausführlich dokumentieren, was man bei Verwendung von mod_perl eben alles nicht tun darf.
Dann müssen die Leute selbst entscheiden, was sie wollen: Komfort _oder_ Performance.
Viele Grüße
Michael