und Apache2 ?!

ööh joa,

Ich schlag mich grad mit meinem Apachen und Perl herum...
Ich hab versuch mod_perl auf dem Server zum laufen zu kriegen,
aber es will ums verrecken net funktionieren:
Code:
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@fumuga.com 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.
in der Logfile steht dass das Script ein unerwartetes Ende hätte.
Code:
[Mon Jul 30 00:24:25 2007] [notice] Apache/2.0.55 (Ubuntu) PHP/5.1.2 mod_ssl/2.0.55 OpenSSL/0.9.8a mod_perl/2.0.2 Perl/v5.8.7 configured -- resuming normal operations
Code:
[Mon Jul 30 00:24:26 2007] [warn] Cannot get media type from 'cgi-script'
[Mon Jul 30 00:24:26 2007] [error] [client 89.55.23.37] Premature end of script headers: test.pl, referer: http://domain.tld/
[Mon Jul 30 00:24:26 2007] [error] [client 89.55.23.37] File does not exist: /.../favicon.ico, referer: http://domain.tld/test.pl

In der Config hab ich folgende zusätzliche Einträge gemacht:
Code:
AddType cgi-script .pl .cgi
AddHandler cgi-script .cgi .pl
Code:
Options ALL +ExecCGI

Das Modul wird geladen mit:
Code:
LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so


Kann mir jemand sagen warum mein Script
Code:
#!/usr/bin/perl -w
use strict;
use CGI;

print "hallo";
immer den 500er erzeugt?
Was mach ich falsch, oder besser, Wie mache ich es richtig? ^^


  • Apache 2.0.55
  • Perl 5.8.7
  • Ubuntu 6.06


MFG - Keks
 
Für den AddHandler cgi-script muß auch das CGI-Modul geladen sein. Das 'premature end of script header' kommt allerdings oft daher, daß das Skript für den Apache nicht lese- oder ausführbar ist. Ansonsten poste mal bitte die komplett Apache-Konfiguration. Aus Sicherheitsgründen solltest du ExecCGI auch nur für deinen Skript-Ordner und auf keinen Fall global setzen und dann mit ScriptAlias im entsprechenden VHost bekannt geben, wo sich der Skript-Ordner befindet. Idealerweise sollte der außerhalb des DocumentRoot liegen.
 
Hey danke schonmal :)

Die (zensierte :P) Serverconfig sieht folgendermaßen aus:
Code:
ServerRoot "/etc/apache2"


LockFile /var/lock/apache2/accept.lock
PidFile /var/run/apache2.pid


Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15


# prefork MPM
# StartServers ......... number of server processes to start
# MinSpareServers ...... minimum number of server processes which are kept spare
# MaxSpareServers ...... maximum number of server processes which are kept spare
# MaxClients ........... maximum number of server processes allowed to start
# MaxRequestsPerChild .. maximum number of requests a server process serves
<IfModule prefork.c>
    StartServers         5
    MinSpareServers      5
    MaxSpareServers     10
    MaxClients          20
    MaxRequestsPerChild  0
</IfModule>
<IfModule worker.c>
    StartServers         2
    MaxClients         150
    MinSpareThreads     25
    MaxSpareThreads     75
    ThreadsPerChild     25
    MaxRequestsPerChild  0
</IfModule>
<IfModule perchild.c>
    NumServers           5
    StartThreads         5
    MinSpareThreads      5
    MaxSpareThreads     10
    MaxThreadsPerChild  20
    MaxRequestsPerChild  0
    AcceptMutex fcntl
</IfModule>

User www-user
Group www-group


ErrorLog /var/log/apache2/error.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


Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf

<IfModule ssl_module>
   SSLRandomSeed startup builtin
   SSLRandomSeed connect builtin
   SSLSessionCache dbm:/usr/local/apache2/logs/ssl_scache
</IfModule>

Include /etc/apache2/httpd.conf
Include /etc/apache2/ports.conf
Include /etc/apache2/conf.d/[^.#]*


Alias /icons/ "/usr/share/apache2/icons/"
<Directory "/usr/share/apache2/icons">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>


<IfModule mod_negotiation.c>
<IfModule mod_include.c>
    Alias /error/ "/usr/share/apache2/error/"

    <Directory "/usr/share/apache2/error">
        AllowOverride None
        Options IncludesNoExec
        AddOutputFilter Includes html
        AddHandler type-map var
        Order allow,deny
        Allow from all
        LanguagePriority en es de fr
        ForceLanguagePriority Prefer Fallback
    </Directory>

    ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
    ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
    ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
    ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
    ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
    ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
    ErrorDocument 410 /error/HTTP_GONE.html.var
    ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
    ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
    ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
    ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
    ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
    ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
    ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
    ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
    ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
    ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var

</IfModule>
</IfModule>

DirectoryIndex index.htm index.html index.xhtml index.php index.pl index.cgi index.txt


AccessFileName .htaccess
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>


UseCanonicalName Off
HostnameLookups Off


TypesConfig /etc/mime.types
DefaultType text/plain


IndexOptions FancyIndexing VersionSort

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^^

AddIcon /icons/dirsymlink.jpg ^^SYMDIR^^
AddIcon /icons/symlink.jpg ^^SYMLINK^^

DefaultIcon /icons/unknown.gif


ReadmeName README.html
HeaderName HEADER.html


IndexIgnore .??* *~ *# HEADER* RCS CVS *,t

AddEncoding x-compress Z
AddEncoding x-gzip gz tgz

AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .et
AddLanguage fr .fr
AddLanguage de .de
AddLanguage el .el
AddLanguage it .it
AddLanguage ja .ja
AddLanguage pl .po
AddLanguage ko .ko
AddLanguage pt .pt
AddLanguage no .no
AddLanguage pt-br .pt-br
AddLanguage ltz .ltz
AddLanguage ca .ca
AddLanguage es .es
AddLanguage sv .se
AddLanguage cz .cz
AddLanguage ru .ru
AddLanguage tw .tw
AddLanguage zh-tw .tw

LanguagePriority de en fr da nl et el it ja ko no pl pt pt-br ltz ca es sv tw


AddDefaultCharset       ISO-8859-1

AddCharset ISO-8859-1  .iso8859-1  .latin1
AddCharset ISO-8859-2  .iso8859-2  .latin2 .cen
AddCharset ISO-8859-3  .iso8859-3  .latin3
AddCharset ISO-8859-4  .iso8859-4  .latin4
AddCharset ISO-8859-5  .iso8859-5  .latin5 .cyr .iso-ru
AddCharset ISO-8859-6  .iso8859-6  .latin6 .arb
AddCharset ISO-8859-7  .iso8859-7  .latin7 .grk
AddCharset ISO-8859-8  .iso8859-8  .latin8 .heb
AddCharset ISO-8859-9  .iso8859-9  .latin9 .trk
AddCharset ISO-2022-JP .iso2022-jp .jis
AddCharset ISO-2022-KR .iso2022-kr .kis
AddCharset ISO-2022-CN .iso2022-cn .cis
AddCharset Big5        .Big5       .big5

AddCharset WINDOWS-1251 .cp-1251   .win-1251
AddCharset CP866       .cp866
AddCharset KOI8-r      .koi8-r .koi8-ru
AddCharset KOI8-ru     .koi8-uk .ua
AddCharset ISO-10646-UCS-2 .ucs2
AddCharset ISO-10646-UCS-4 .ucs4
AddCharset UTF-8       .utf8
AddCharset GB2312      .gb2312 .gb
AddCharset utf-7       .utf7
AddCharset utf-8       .utf8
AddCharset big5        .big5 .b5
AddCharset EUC-TW      .euc-tw
AddCharset EUC-JP      .euc-jp
AddCharset EUC-KR      .euc-kr
AddCharset shift_jis   .sjis

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
AddType application/x-tar .tgz
AddType cgi-script .pl .cgi

AddHandler cgi-script .cgi .pl

<FilesMatch "\.shtml(\..+)?$">
    SetOutputFilter INCLUDES
</FilesMatch>

#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


BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^gnome-vfs" redirect-carefully
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully


NameVirtualHost domain.tld:80
<VirtualHost domain.tld:80>
   ServerName domain.tld
   ServerAlias www.domain.tld
   ServerAdmin webmaster@domain.tld

   DocumentRoot /.../web
   <Directory "/.../web">
      Options       NONE
      AllowOverride ALL
      Order         ALLOW,DENY
      Allow from all
   </Directory>

   CustomLog /.../res/logfiles/apache2_access.log combined
   ErrorLog  /.../res/logfiles/apache2_error.log
   LogLevel warn

   php_admin_value open_basedir      ".../:/usr/share/"
   php_admin_value upload_tmp_dir    "/.../res/upload_tmp"
   php_admin_value session.save_path ".../res/sessions/"
   php_admin_value error_log         "/.../res/logfiles/php_error.log"
</VirtualHost>

Include /etc/apache2/vhosts/*.cfg

<VirtualHost domain.tld:80>
   ServerName domain.tld
   ServerAlias sub.domain.tld
   ServerAlias www.sub.domain.tld
   ServerAdmin webmaster@domain.tld

   DocumentRoot /.../
   <Directory "/.../">
      Options       ALL +ExecCGI
      AllowOverride ALL
      Order         ALLOW,DENY
      Allow from all
   </Directory>

</VirtualHost>

Module werden sowohl CGI alsauch Perl geladen:
Code:
LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so
 
Stimmen denn die Rechte des Skripts und hat es eine Newline am Ende? Außerdem kannst du das 'AddType cgi-script .pl .cgi' getrost rausnehmen. Der AddHandler-Eintrag reicht da im Normalfall völlig aus. Im Normalfall sollten die notwendigen Einträge ja auch korrekt gemacht werden, wenn du das Modul wie unter Debian/Ubuntu üblich mit a2enmod aktivierst. Außerdem solltest du dich entscheiden, ob du das Perl-Modul oder das CGI-Modul nutzen willst. Beide zusammen können meiner Erfahrung nach zu seltsamen Fehlern führen. Und das wichtigste... deinem Skript fehlt die wichtigste Zeile:

Code:
print "Content-type: text/plain", "\n\n";

Das muß als erste Zeile immer ausgegeben werden, damit der Browser mit dem Output des Skripts was anfangen kann. Sonst bekommst du nämlich auch diesen 500er-Fehler.
 
aaah, der content-type wars :)

öhm, was würdest du empfehlen? Perl oder CGI?
Ich möchte eigentlich schon gerne richtige Perlscripte schreiben...
Kann ich dann das CGI-Modul trotzdem ganz normal benutzen wenn ich das CGI-Modul im Apachen deaktiviere?
 
Ich empfehle die Nutzung des mod-cgi, solange du nicht direkt den Apache mit deinen Skripten steuern willst. Es ist einfach sicherer, da leichter konfigurierbar, wodurch sich weniger Fehler einschleichen können. Wobei ich gerade sehe, daß mod_perl ohne mod_cgi garnicht mehr funktioniert. ?(
 
hmmm...

In Sachen Sicherheit ist das net soooo tramatisch, da es nur ein Webinterface wird,
zu dessen Code selbst auch nur ich und mein Kollege (look@she - auch hier im board unterwegs) Zugang haben werden.

Übrgebene Daten werden sowieso nicht direkt verarbeitet, sondern mit diversen Prüfungen entsprechend behandelt.
( warum kann es in Perl denn verdammtnochmal kein Case geben... *grml* ^^ )

Es hat auch nur ein V-Host ( der nur für das Webinterface zuständig ist ) die Berechtigung CGI-Scripte auszuführen, weshalb ich mir in Sachen Sicherheit da weniger Sorgen mache :)

Ich werd mal bissel ausprobieren ob das was ich machen will auch mit mod_cgi allein funktioniert.

Danke dir :)
 
Original von keksinat0r
( warum kann es in Perl denn verdammtnochmal kein Case geben... *grml* ^^ )

Gibt es:

Code:
use Switch;

switch ($val) {

case 1          { print "number 1" }
case "a"        { print "string a" }
case [1..10,42] { print "number in list" }
case (@array)   { print "number in list" }
case /\w+/      { print "pattern" }
case qr/\w+/    { print "pattern" }
case (%hash)    { print "entry in hash" }
case (\%hash)   { print "entry in hash" }
case (\&sub)    { print "arg to subroutine" }
else            { print "previous case not true" }
}
 
8o ich hab mich "tot-gegooglet" nach einer Case-Funktion,
aber immer nur die "selbstgebastelten" Lösungen mit Label und last gefunden...

Nochma Danke - du hast mir grad viel Tipparbeit erspart :) (elsif ist ja so nervig... ^^)
 
Zurück
Oben