Thread httpd.conf bei apche2 unter suse 9.3 ganz anders (25 answers)
Opened by Froschpopo at 2005-11-03 10:48

Froschpopo
 2005-11-08 17:32
#31219 #31219
User since
2003-08-15
2653 articles
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
30.8.5.2. mod_perl vs. CGI
Im einfachsten Fall kann man ein bisheriges CGI-Skript als mod_perl-Skript laufen lassen, indem man es unter einer anderen URL aufruft. Die Konfigurationsdatei enthält Aliase, die auf das gleiche Verzeichnis verweisen und darin enthaltene Skripten entweder über CGI oder über mod_perl aufrufen. Alle diese Einträge sind in der Konfigurationsdatei bereits eingetragen. Der Alias-Eintrag für CGI lautet:

ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"
   
Die Einträge für mod_perl lauten wie folgt:

<IfModule mod_perl.c>
# Provide two aliases to the same cgi-bin directory,
# to see the effects of the 2 different mod_perl modes.
# for Apache::Registry Mode
ScriptAlias /perl/          "/srv/www/cgi-bin/"
# for Apache::Perlrun Mode
ScriptAlias /cgi-perl/      "/srv/www/cgi-bin/"
</IfModule>
   
Die folgenden Einträge sind für mod_perl ebenfalls nötig. Auch sie sind bereits in der Konfigurationsdatei eingetragen.

#
# If mod_perl is activated, load configuration information
#
<IfModule mod_perl.c>
Perlrequire /usr/include/apache/modules/perl/startup.perl
PerlModule Apache::Registry

#
# set Apache::Registry Mode for /perl Alias
#
<Location /perl>
SetHandler  perl-script
PerlHandler Apache::Registry
Options ExecCGI
PerlSendHeader On
</Location>

#
# set Apache::PerlRun Mode for /cgi-perl Alias
#
<Location /cgi-perl>
SetHandler  perl-script
PerlHandler Apache::PerlRun
Options ExecCGI
PerlSendHeader On
</Location>

</IfModule>
   
Diese Einträge legen Aliase für die Modi Apache::Registry und Apache::PerlRun an. Der Unterschied zwischen beiden Modi ist folgender:

Apache::Registry
Alle Skripten werden kompiliert und dann in einem Cache gehalten. Jedes Skript wird als Inhalt einer Subroutine angelegt. Dies ist gut für die Performance, hat jedoch auch einen Nachteil: Die Skripten müssen sehr sauber programmiert sein, da Variablen und Subroutinen zwischen den Aufrufen erhalten bleiben. Das bedeutet, dass man Variablen selbst zurücksetzen muss, damit sie beim nächsten Aufruf erneut verwendet werden können. Speichert man beispielsweise in einem Skript für Online-Banking die Kreditkartennummer eines Kunden in einer Variablen, so könnte diese Nummer wieder auftauchen, wenn der nächste Kunde die Anwendung benutzt und somit das gleiche Skript wieder aufruft.

Apache::PerlRun
Die Skripten werden für jede Anfrage neu kompiliert, sodass Variablen und Subroutinen zwischen den Aufrufen aus dem Namespace verschwinden. Der Namespace ist die Gesamtheit aller Variablennamen und Routinennamen, die zu einem bestimmten Zeitpunkt während der Existenz eines Skripts definiert sind. Mit Apache::PerlRun muss man deswegen nicht so genau auf saubere Programmierung achten, da alle Variablen beim Start des Skripts neu initialisiert sind und keine Werte aus vorangegangenen Aufrufen mehr enthalten können. Dies geht zu Lasten der Geschwindigkeit, ist aber immer noch deutlich schneller als CGI (trotz einiger Ähnlichkeiten zwischen Apache::PerlRun und CGI), da man sich den Aufruf eines eigenen Prozesses für den Interpreter spart.


wie istn das jetzt mit globalen variablen die z.b. mit our deklariert werden? wie muss man die wieder ung├╝ltig machen?\n\n

<!--EDIT|Froschpopo|1131464955-->

View full thread httpd.conf bei apche2 unter suse 9.3 ganz anders