# Apache und perl?

## 3PO

Hallo Zusammen.

Wie kann ich denn den Apache dazu bewegen, dass er in cgi-bin perl Scripte ausführt.

Ich habe schon so einiges bei google gefunden, aber leider funktioniert das alles nicht.  :Sad: 

Gibt es da irgendwo ein HowTo, das funktioniert?

----------

## Yamakuzure

Nö, aber den Apache2 unter Gentoo dazu zu bewegen perl-scripte auszuführen ist nicht einfach.

Achtung! die folgende liste erlaubt es .pl Dateien von überall auf dem Server auszuführen! Wenn es nur aus cgi-bin sein soll, dann darf "/etc/apache2/modules.d/75_mod_perl.conf" natürlich nicht so verändert werden wie unten.www-apache/mod_perl hast du ja sicherlich installiert, gell? */etc/conf.d/apache2 wrote:*   

> APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D LANGUAGE -D PHP5 -D PERL"

  */etc/apache2/modules.d/00_mod_mime.conf wrote:*   

> AddHandler cgi-script .cgi .pl

  */etc/apache2/modules.d/75_mod_perl.conf wrote:*   

> #<Directory /home/*/public_html/perl>
> 
> #       SetHandler perl-script
> 
> #       PerlResponseHandler ModPerl::PerlRun
> ...

  */etc/apache2/vhosts.d/default_vhost.include wrote:*   

> <Directory "/var/www/localhost/htdocs">
> 
>         Options Indexes FollowSymLinks +ExecCGI
> 
>         # Erlaube override, um ExecCGI auch abschalten zu können
> ...

 damit sollte es klappen, tut's zumindest bei mir auf drei Rechnern.

----------

## 3PO

THX @ Yamakuzure,

1-3 hatte ich schon gemacht.

Habe dann noch 4 + 5 gemacht, aber leider funktioniert es immer noch nicht.  :Sad: 

Wenn ich im Webbrowser die URL zur *.pl angebe, dann will er sie immer nur herunterladen, anstatt dass sie auf den Server ausgeführt wird.

----------

## Yamakuzure

Das Einzige, was mir spontan dazu einfällt, ist ein Problem an dem ich kauen "durfte":

Deine Perl-Datei *muss* einen gültigen Content-Type zurückgeben, der kleinste Tippfehler bedeutet "Download".

Um zum Beispiel deine Umgebungsvariablen einzusehen, kannst du mal folgendes Skript testen:

```
#!/usr/bin/perl -w

use strict;

use CGI;

print CGI::header('text/plain'); ## <- WICHTIG

use Cwd;

print "getcwd  : " . getcwd . "\n";

use Cwd 'abs_path';

print "abs_path: " . abs_path($0) . "\n";

print "-------------------------\n";

for my $k (sort keys %ENV)

  {

    print "$k : $ENV{$k}\n";

  }

```

Auf meinem System bekomme ich den folgenden Output:

```
getcwd  : /var/www/localhost/htdocs/ArLic

abs_path: /var/www/localhost/htdocs/ArLic/envTest.pl

-------------------------

DOCUMENT_ROOT : /var/www/localhost/htdocs

GATEWAY_INTERFACE : CGI/1.1

HTTP_ACCEPT : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

HTTP_ACCEPT_CHARSET : ISO-8859-1,utf-8;q=0.7,*;q=0.7

HTTP_ACCEPT_ENCODING : gzip,deflate

HTTP_ACCEPT_LANGUAGE : de-de,de;q=0.8,en-us;q=0.5,en;q=0.3

HTTP_CONNECTION : keep-alive

HTTP_HOST : localhost

HTTP_KEEP_ALIVE : 115

HTTP_USER_AGENT : Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.15) Gecko/20110307 Gentoo Firefox/3.6.15

PATH : /lib64/rc/sbin:/lib64/rc/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/sys/bin:/home/sed/sys/bin

QUERY_STRING : 

REMOTE_ADDR : 127.0.0.1

REMOTE_PORT : 49032

REQUEST_METHOD : GET

REQUEST_URI : /ArLic/envTest.pl

SCRIPT_FILENAME : /var/www/localhost/htdocs/ArLic/envTest.pl

SCRIPT_NAME : /ArLic/envTest.pl

SERVER_ADDR : 127.0.0.1

SERVER_ADMIN : root@localhost

SERVER_NAME : localhost

SERVER_PORT : 80

SERVER_PROTOCOL : HTTP/1.1

SERVER_SIGNATURE : <address>Apache Server at localhost Port 80</address>

SERVER_SOFTWARE : Apache

UNIQUE_ID : TXdQ-n8AAAEAAEHGBnQAAAAB
```

Wenn das immernoch nicht hinhaut, was bekommst du von der Adresse "http://localhost/perl-status" ?

Ferner: Perl ist standardmäßig so konfiguriert, dass sich die Skripte in /perl bzw. /cgi-perl und *nicht* in /cgi-bin befinden. (Siehe /etc/apache2/modules.d/75_mod_perl.conf)

----------

## 3PO

Danke @ Yamakuzure,

aber es funktioniert mitllerweile.  :Smile: 

Ich bin nach dieser Anleitung vorgegangen:

http://www.gentoo-wiki.info/Apache_Modules_mod_perl

----------

## Yamakuzure

Das ist komisch, denn das ist auch nichts Anderes als Oben steht... (Ob "Files" oder "Location" sollte egal sein...)

aaaber ich werde den Eintrag mit "Files" bei mir auch einbauen, denn das sieht mir sehr viel sauberer aus als meine Config.

Edith freut sich: Woohooo, das sieht doch viel angenehmer aus. Nach dem hinzufügen von -D PERL reicht bei mir die folgende Konfiguration nun aus:

```
 # egrep "^\s*[^# ]" /etc/apache2/modules.d/75_mod_perl.conf

<IfDefine PERL>

LoadModule perl_module modules/mod_perl.so

PerlRequire "/etc/apache2/modules.d/apache2-mod_perl-startup.pl"

PerlModule ModPerl::Registry

<Location /perl-status>

        SetHandler perl-script

        PerlResponseHandler Apache2::Status

        Order deny,allow

        Deny from all

        Allow from 127.0.0.1

</Location>

<Files ~ "\.pl$">

        SetHandler perl-script

        PerlResponseHandler ModPerl::Registry

        Options +ExecCGI

        PerlSendHeader On

</Files>

</IfDefine>
```

(Keine .cgi Endung bei mir, und ich mag nicht auf perl-status verzichten  :Wink: )

Also dank deinem Thread habe ich gehörig was dazugelernt heute. Wenn man nämlich sowas nicht weiß, kann man sich nur "durchgoogeln", und da kommt dann auch echt viel Umständliches bei raus. (gentoo-wiki.info war mir bis eben auch neu.   :Embarassed:  )

----------

