Linux als SOHO-Server

für Linux- und Windows-Clients
http://linux.eusterholz.dyndns.org

Kapitel:

Home
Debian Installation
Debian Etc.
Internet-Zugang
Telnet
FTP
r-Utilities
SSH
Printing
NTP
Nameserver
NFS/NIS/Automount
Samba (SMB-Server)
Apache (WEB-Server)
Modem / ISDN
Backup
Etc.


mod_perl

Installation/Konfiguration ] Status/Info ] UserDir ] Virtuelle Hosts ] Authentifizierung ] CGI ] [ mod_perl ] PHP ] SSI ] SSL ] WebDAV ] Log-Dateien ] ht://Dig ]


Das optionale Modul: 'mod_perl' ist ein Perl-Interpreter, der im Apache-Server einbettet ist. Dadurch kann Perl-Code, wie z.B. CGI-Skripte, deutlich schneller ausgeführt werden. Der Geschwindigkeitsgewinn ist damit zu begründen, dass mod_perl-Programme nur beim ersten Aufruf in den Speicher geladen und kompiliert werden. Anschließend wird das Programm im Cache abgelegt. Erst wenn das Perl-Programm verändert wird, wird es erneut kompiliert.
Weiterhin ist es möglich, Perl-Skripte direkt als Apache-Modul zu implementieren.

Im Folgenden wird vorgestellt, wie das Modul: 'mod_perl' im Apache2-Server unter Debian (sarge) zu implementieren ist.

Installation/Konfiguration

Die Installation von 'mod_perl' gestaltet sich bei der Debian-Distribution am einfachsten mittels: 'apt-get install libapache2-mod-perl2'. Eventuell ist das neu installierte Modul mit 'a2enmod' noch zu aktivieren und der Apache2 ist neu zu starten. Auch sollte der Standard-Perl-Interpreter, der eigentlich bei der Basis-Installation schon mit installiert wird vorhanden sein. Danach kann die Konfiguration des Apache-Servers bezüglich 'mod_perl' beginnen.

Im Prinzip gibt es, genau wie bei CGI, zwei unterschiedliche Möglichkeiten um Perl-Programme mittels 'mod_perl' auf dem Apache-Server zu unterstützen:
Die erste Möglichkeit besteht daraus, dass ein bestimmtes Verzeichnis und damit auch die darunter liegenden Verzeichnisse für Perl-Programme zu deklarieren. Es bietet sich an, dass schon bestehende und auch konfigurationstechnisch vorhandene
/CGI-Verzeichnis dafür zu nutzen (vgl. Unterkapitel: CGI).
Die zweite Möglichkeit ist, Perl-Programme unabhängig davon, in welchem Verzeichnis sie sich befinden, diese anhand der Endung zu erkennen und diese 'mod_perl' zur Ausführung zu übergeben. Standardmäßig verwendet man für Perl-Programme die Endung: '.pl'.

Wie schon erwähnt ist in der default-Datei für den virtuellen Host: '/etc/apache2/sites-available/default' bereits ein CGI-Bereich vorgesehen, der für die mod_perl-Unterstützung erweitert werden kann:

Auszug aus: /etc/apache2/sites-available/default

NameVirtualHost *
<VirtualHost *>
...
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
                <Files *.pl>
                        SetHandler perl-script
                        PerlHandler ModPerl::Registry
                        Options +ExecCGI
                        PerlSendHeader On
                </Files>
        </Directory>
...
</VirtualHost>

Mit den gelb markierten Zeilen wird erreicht, dass alle Dateien mit der Extension '.pl'  an das Modul: 'ModPerl::Registry' weitergeleitet werden.

Möchte man, wie oben als zweite Möglichkeit beschrieben, Perl-Programme außerhalb des Verzeichnisses: '/cgi-bin/' verwenden, so ist in der Hauptkonfigurationsdatei: 'apache2.conf' die folgende Zeile frei zuschalten und um '.pl' zu erweitern:

Auszug aus: /etc/apache2/apache2.conf (ca. Zeile: 341)

...
# To use CGI scripts outside /cgi-bin/:
#
AddHandler cgi-script .cgi .pl
...

In der default-Datei für den virtuellen Host: '/etc/apache2/sites-available/default' sind anschließend noch folgende gelb markierten Konfigurationen einzufügen:

Auszug aus: /etc/apache2/sites-available/default

NameVirtualHost *
<VirtualHost *>
...
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews +ExecCGI
                AllowOverride None
                Order allow,deny
                allow from all
                <Files *.pl>
                        SetHandler perl-script
                        PerlHandler ModPerl::Registry
                        Options +ExecCGI
                        PerlSendHeader On
                </Files>
                # This directive allows us to have apache2's default start page
                # in /apache2-default/, but still have / go to the right place
                RedirectMatch ^/$ /apache2-default/
        </Directory>
...
</VirtualHost>

Ab dem Verzeichnis: '/var/www/' werden alle Dateien mit der Endung '.pl' mittels 'mod_perl' unterstützt.

Anmerkungen

Zum Test der mod_perl-Unterstützung des Apache-Servers, kann folgendes kleines Testprogramm in Perl genutzt werden:

CGI-Testprogramm: perl-test.pl

#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "Hello World!; mod_perl 1.999 is working.\n";

Das Testprogramm sollte mit den notwendigen Dateirechten (chmod 755) versehen werden. Durch Aufruf eines Browsers sollte der Text: 'Hello World!; 'mod_perl 1.999' is working.' ausgeben werden.

Auch zum Testen gut geeignet ist die Ausgabe mit: 'Apache::Status', welche einige Informationen über den Status des eingebetteten Perl-Interpreters ausgibt. Die Ausgabe wird dynamisch generiert, ähnlich wie bei 'server-status' oder 'server-info'. Damit der Status ausgegeben wird, müssen folgende Zeilen in der 'apache2.conf' eingefügt werden:

Auszug aus: /etc/apache2/apache2.conf (ca. Zeile: 391)

# enable perl-status for mod_perl
#
<Location /perl-status>
      SetHandler modperl
      # PerlResponseHandler Apache::Status
      PerlResponseHandler Apache2::Status
      Order deny,allow
      Deny from all
      Allow from localhost
</Location>

Ab Debian 4.0 (Etch) sollte 'PerlResponseHandler Apache2::Status' verwendet werden.

Wird nun die die URL: 'httpd://<localhost>/perl-status' im Browser eingegeben, so sollte der Status ausgegeben werden.

Weitere Infos

Homepage: mod_perl http://perl.apache.org/
Practical mod_perl http://modperlbook.org/index.html
Installationsanleitung http://perl.apache.org/docs/2.0/user/install/install.html
Apache::Status - Embedded interpreter status information http://apache.perl.org/docs/2.0/api/Apache/Status.html
mod_perl Quick Reference Card http://refcards.com/refcards/mod_perl/index.html

Home ] Nach oben ] Installation/Konfiguration ] Status/Info ] UserDir ] Virtuelle Hosts ] Authentifizierung ] CGI ] [ mod_perl ] PHP ] SSI ] SSL ] WebDAV ] Log-Dateien ] ht://Dig ]

letzte Änderung: 02. Oktober 2007

 

Copyright © 2004 Norbert Eusterholz