Perl Skripte mit SpeedyCGI/PersistantPerl auf Debian Etch beschleunigen

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man SpeedyCGI (auch bekannt als PersistantPerl) auf einem Debian Etch System installiert und verwendet. SpeedyCGI ist eine Möglichkeit Perl Skripte durchgäng auszuführen, was sie viel schneller macht. Es hält den Perl Interpreter am Laufen und bei folgenden Durchgängen wird der gleiche Interpreter genutzt anstatt jedes Mal einen neuen Perl Interpreter zu starten.

Diese Anleitung ist ohne jegliche Gewähr! Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

Ich habe dies auf einem Debian Etch System (auf dem Apache2 installiert war) mit einem virtuellen Host www.example.com (Dokumenten-Root: /var/www/web1/web) getestet, das konfiguriert ist, Perl Skripte im /var/www/web1/cgi-bin Verzeichnis auszuführen. Die Pfade, die hier verwendet werden, werden in Deinem Setup andere sein, Du musst sie also an entsprechender Stelle anpassen.

Im Folgenden zeige ich drei verschiedene Wege, wie Du SpeedyCGI für Deine Perl Skripte verwenden kannst.

2 Installation von SpeedyCGI

Um SpeedyCGI zusammen mit dem SpeedyCGI Apache2 Modul zu installieren, führen wir einfach dies aus:

apt-get install libapache2-mod-speedycgi speedy-cgi-perl

und starten Apache danach neu:

/etc/init.d/apache2 force-reload


3 Verwendung von SpeedyCGI

Zuerst erstellen wir ein normales "Hello World!" Perl Skript um herauszufinden, ob Perl funktioniert. Am Ende des Skriptes verwenden wir einen besoneren Code, der nur ausgeführt wird, wenn SpeedyCGI verwendet wird. Das hilft uns zu bestimmen, wann wir uns im "SpeedyCGI mode" und wann im normalen "Perl mode" befinden. Ich erstelle das Skript in meinem cgi-bin Verzeichnis, /var/www/web1/cgi-bin:

vi /var/www/web1/cgi-bin/speedy-test.cgi


#!/usr/bin/perl
### Your Script Here. For example: print "Content-type: text/htmlnn<h1>Hello World!</h1>n"; ## ## Optionally, use the CGI::SpeedyCGI module for various things ## # See if we are running under SpeedyCGI or not. if (eval {require CGI::SpeedyCGI} && CGI::SpeedyCGI->i_am_speedy) { print "<br>Running under speedy=", CGI::SpeedyCGI->i_am_speedy ? 'yes' : 'no', "n"; }
Wir müssen das Skript ausführbar machen:

chmod 755 /var/www/web1/cgi-bin/speedy-test.cgi

(Wenn Du suExec verwendest, musst Du auch den Besitzer und die Gruppe des Skriptes ändern damit sie zum suExec Benutzer und der Gruppe dieses vhosts passen.)

Nun können wir dieses Skript in einem Browser aufrufen (http://www.example.com/cgi-bin/speedy-test.cgi). Du müsstest Hello World! sehen, nichts anderes:


Perl Skripte funktionieren also, jedoch wird SpeedyCGI noch nicht verwendet.

Lass uns nun etwas über die drei Methoden erfahren, wie man SpeedyCGI verwenden kann.

3.1 Apache anweisen, alle Perl Skripte mittels SpeedyCGI auszuführen

Die erste Methode ist, Apache mitzuteilen, dass es alle Perl Skripte mittels SpeedyCGI ausführen soll, wenn sich die Perl Skripte an einem bestimmten Ort befinden. Wir werden einen Alias /speedy/ erstellen, der auf unser cgi-bin Verzeichnis zeigt und wenn wir die /speedy/ Adresse in unserem Browser verwenden, wird das Perl Skript von SpeedyCGI ausgeführt. Wenn wir /cgi-bin/ verwenden, wird das Skript ohne SpeedyCGI ausgeführt.

Öffne die Datei, in der sich Deine Apache vhost Location für www.example.com befindet und füge folgende Zeilen hinzu (wenn Du ISPConfig verwendest, kannst Du die folgenden Zeilen einfach in das Apache Directives Feld des entsprechenden vhosts einfügen):
Alias /speedy/ /var/www/web1/cgi-bin/
<Location /speedy> SetHandler speedycgi-script Options ExecCGI allow from all </Location>
Starte Apache danach neu (das musst Du nicht tun, wenn Du ISPConfig verwendest):

/etc/init.d/apache2 restart

Öffne nun http://www.example.com/cgi-bin/speedy-test.cgi - Du solltest nur Hello World! sehen, was bedeutet, dass SpeedyCGI nicht verwendet wird:


Gehe dann zu http://www.example.com/speedy/speedy-test.cgi und Du müsstest sehen, dass das Skript nun mittels SpeedyCGI ausgeführt wird:

3.2 Ändern der Shebang Zeile der Perl Skripte

Der zweite Weg, SpeedyCGI zu verwenden, ist, einfach die Shebang Zeile in den Perl Skripten von#!/usr/bin/perl zu #!/usr/bin/speedy zu ändern. So musst Du Apache nicht noch einmal neu konfigurieren:

vi /var/www/web1/cgi-bin/speedy-test.cgi


#!/usr/bin/speedy
### Your Script Here. For example: print "Content-type: text/htmlnn<h1>Hello World!</h1>n"; ## ## Optionally, use the CGI::SpeedyCGI module for various things ## # See if we are running under SpeedyCGI or not. if (eval {require CGI::SpeedyCGI} && CGI::SpeedyCGI->i_am_speedy) { print "<br>Running under speedy=", CGI::SpeedyCGI->i_am_speedy ? 'yes' : 'no', "n"; }
Öffne http://www.example.com/cgi-bin/speedy-test.cgi in einem Browser und Du solltest feststellen, dass SpeedyCGI verwendet wird:

3.3 Ändern der Dateiendung

Die dritte Variante ist das Ändern der Dateiendung der Perl Skripte von.cgi zu etwas wie .speedy. Außerdem wird Apache angewiesen, alle .speedy Dateien durch SpeedyCGI auszuführen.

Lass uns also jetzt das Skript /var/www/web1/cgi-bin/speedy-test.speedy erstellen (eine exakte Kopie von /var/www/web1/cgi-bin/speedy-test.cgi):

vi /var/www/web1/cgi-bin/speedy-test.speedy


#!/usr/bin/perl
### Your Script Here. For example: print "Content-type: text/htmlnn<h1>Hello World!</h1>n"; ## ## Optionally, use the CGI::SpeedyCGI module for various things ## # See if we are running under SpeedyCGI or not. if (eval {require CGI::SpeedyCGI} && CGI::SpeedyCGI->i_am_speedy) { print "<br>Running under speedy=", CGI::SpeedyCGI->i_am_speedy ? 'yes' : 'no', "n"; }
Wir müssen das Skript ausführbar machen:

chmod 755 /var/www/web1/cgi-bin/speedy-test.speedy

(Wenn Du suExec verwendest, musst Du auch den Besitzer und die Gruppe des Skriptes ändern, damit sie auf den suExec Benutzer und die Gruppe dieses vhosts passen.)

Öffne die Datei, in der sich Deine Apache vhost Location für www.example.com befindet und füge folgende Zeilen hinzu (wenn Du ISPConfig verwendest, kannst Du folgende Zeilen einfach in das Apache Directives Feld des entsprechenden vhosts einfügen):
AddHandler speedycgi-script .speedy
<Location /> Options ExecCGI </Location>
Starte Apache danach neu (wenn Du ISPConfig verwendest, musst Du dies nicht tun):

/etc/init.d/apache2 restart

Öffne http://www.example.com/cgi-bin/speedy-test.speedy in einem Browser und Du müsstest feststellen, dass SpeedyCGI verwendet wird:

4 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte