info@a-coding-project.de

Apache: Serverseitige Programmierung

Zur Interaktion mit dem User sind Scriptsprachen wie PHP oder PERL sehr beliebt. Der Apache Webserver lässt sich natürlich auch mit diesen betreiben. Die Konfiguration des Apache-Webservers und Installation einiger wichtige Scriptsprachen wird im Folgenden beschrieben.

PHP für Windows

Für Windows muss natürlich die entsprechende Version von http://www.php.net herunter geladen werden. Bevorzugen sollte man dabei die gepackte Version da sich dort die Einstellungen alle selbst tätigen lassen - wer das nicht möchte, dem ist die Setup-Version ans Herz zu legen. Anschließend wird Paket in einem separaten Verzeichnis unterhalb des Apache Webservers extrahieren und konfiguriert. Zusätzlich ist es notwendig die Dateien aus dem PHP DLL Verzeichnis und die Dateien php4ts.dll und php.ini in das Apache /Bin Verzeichnis zu kopieren.
Damit die Konfigurationsdatei übersichtlich bleibt bindet man über den Include-Befehl die einzelnen Konfigurationsanweisungen gesondert ein. Dazu legt man die Datei php.conf im Konfigurationsverzeichnis neu an und bindt sie wie folgt in die httpd.conf des Apache-Servers ein:

Include conf/php.conf

In der php.conf steht dann

# Die Datei php.conf: Der Pfad zur php4apache2.dll muss 
# natürlich dem Installationspfad angepasst werden
LoadModule php4_module "C:/Server/PHP/sapi/php4apache2.dll"
AddType application/x-httpd-php .php .php3 .phtml
AddType application/x-httpd-php-source .phps

Jetzt muss noch die php.ini angepasst werden. In der Datei sollte man nach "extension_dir" suchen und die jeweiligen Pfade an die Installation anpassen. In unserem Beispiel ist das "C:ServerPHPextensions" Anschließend können die Module weiter unten in der PHP.ini auskommentiert werden. Für den Anfang sind die Module php_gd2.dll (für den Grafiksupport von PHP), und php_pdf.dll (für den PDF Support von PHP) recht interessant. Wer mit anderen Datenbanken z.B. Oracle arbeiten möchte kann mit php_oracle.dll auch mit PHP auf Oracle Datenbanken zugreifen. Nach den Änderungen muss die php.ini gespeichert und der Webserver neugetstartet werden. Zur Kontrolle kann man eine Datei phpinfo.php im htdocs-Verzeichnis mit folgenem Inhalt erstellen:

#PHP Informationsdatei
<?php phpinfo(); ?>,

Unter http://localhost/phpinfo.php sollte jetzt die PHP Informationsseite zu sehen sein.
Wenn PHP-Dateien nicht überall im DocumentRoot ausgeführt werden sollen, kann mit dem Apache 2.x auch einen "Output-Filter" eingesetzt werden, der PHP-Dateien dann ausführt. Beispiel:

<Files *.php>
  SetOutputFilter PHP
  SetInputFilter PHP
</Files>

Die Version 5 von PHP ist entsprechend gleich zu installieren. Bei Schwierigkeiten ist die erste Anlaufstelle die Datei install.txt im PHP-Zipfile.

PHP für Linux

Unter Linux muss der PHP-Quelltext übersetzt werden, dazu einfach den Quelltext von www.php.net herunterladen. Dieser muss dann entpackt, konfiguriert, übersetzt und installiert werden. Anders als bei der Windows-Version gibt es keine extra Module für PHP unter Linux. Um den Support für GD (Grafiken erstellen mit PHP) zu integrieren muss die entsprechende GD Bibliothek auf dem System installiert sein.

#Konfiguration des Quelltextes. 
./configure --prefix=/usr/local/php-4.4.0 
            --with--apsx=/usr'/loca/apache2/bin/apsx
# BITTE BEACHTEN: Alles in einer Zeile

make
make install

Wenn alles funktioniert hat befindet sich das Modul libphp4.so bereits im Apache Modulverzeichnis, wenn nicht ist die Einbindung von PHP über eine externe Konfigurationsdatei empfehlenswert. Dazu einfach "include conf/php.conf" in der httpd.conf einfügen und die Datei php.conf im conf-Verzeichnis erstellen:

#Konfiguration der PHP Module, die Datei php.conf
LoadModule php4_module modules/libphp4.so
AddType application/x-httpd-php .php .php4 .phtml 
AddType application/x-httpd-php-source .phps

# oder mit der Files Direktive gezielt bestimmt 
# wo PHP Dateien ausgeführt werden sollen:
<Files *.php>
  SetOutputFilter PHP
  SetInputFilter PHP
</Files>

CGI

Für CGI (Common Gateway Interface) bringt der Apache Webserver bereits ein eigenes Modul mit. Dieses hat aber leider den Nachteil, dass für jedes Script ein neuer Prozess gestartet wird. Eine stark frequentierte Webseite braucht dann dazu einen entsprechend gut ausgestatteten Server. Dafür ist das Modul nicht unbedingt auf die Sprache Perl beschränkt sondern es kann auch z.B. in C geschrieben werden. Das CGI-Modul wird wie folgt in der httpd.conf aktiviert:

#Konfiguration in der httpd.conf
LoadModule cgi_module modules/mod_cgi.so

Zur Ausführung von CGI-Scripts muss nur noch die Option Exec CGI in dem entsprechenden Verzeichnis oder der Direktive gesetzt werden und schon kann es losgehen. In Verbindung mit <Directory> oder <Location> lässt es sich recht einfach bestimmen wo CGI-Scripte erlaubt sind. Ein einfaches CGI-Script:

#Die Datei HelloWorld.cgi
#!/usr/bin/perl
$Hello = "Hello, World.";
print "Content-type: text/htmlnn";
print "<html>n<head>n<title>CGI Test</title>n<body>n";
print "<h1>$Hello</h1>n"; 
print "</body>n</html>";

Perl

Mit dem Modul mod_perl gibt es noch eine weitere Umsetzung, die es erlaubt Perl scripts auszuführen. Dabei bietet dieses Modul eine wesentlich bessere Performance als CGI und ist damit für Perl scripts geeigneter. Vorrausetzung ist auch hierfür wieder ein funktionierendes installiertes Perl . Für Linux kann das Modul einfach via ppm installiert werden.

ppm install http://theoryx5.uwinnipeg.ca/ppms/mod_perl.ppd 

Anschließend wird noch nach dem Pfad zum Apache Modulverzeichnis gefragt in welches dann das Modul kopiert wird. Die httpd.conf ist wie folgt zu erweritern.

LoadFile "C:/Server/Perl/bin/perl58.dll"
LoadModule perl_module modules/mod_perl.so

Unter Linux ist wieder das altbekannte konfigurieren, übersetzen und installieren von Nöten um das Modul zu installieren. Diesmal aber mit dem Perl Interpreter.

perl Makefile.PL MP_AP_PREFIX=/usr/local/apache2
make 
make install

Nun noch das Modul in der httpd.conf bekannt machen und den Perl-Handler setzen:

LoadModule perl_module modules/mod_perl.so 
Alias /perl "/usr/local/apache2/cgi-bin/"
<Directory /usr/local/apache2/cgi-bin>
  SetHandler perl-script
  PerlResponseHandler ModPerl::Registry
  PerlOptions +ParseHeaders
  Options +ExecCGI
</Directory>

Jetzt werden alle Dateien die im "cgi-bin"-Verzeichnis liegen mit dem Perl Modul verarbeitet. Das Modul mod_cgi kann anschließend aus der Konfiguration des Webservers herausgenommen werden.

SSI

Für die Nutzung von SSI muss nur das Modul mod_include geladen werden, was bei der Standardinstallation eigentlich der Fall ist. Anschließend nur noch ein paar Änderungen in der httpd.conf und schon kann SSI überall auf dem Server genutzt werden. Dort wo SSI eingeschaltet werden soll muss die Options-Direktive um den Wert Includes ergänzt werden und ein AddType und AddOutputFilter gesetzt werden. Beispiel:

<Directory />
  Options Includes
  Sonstige Einstellungen
</directory>
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml 

Damit sind dann shtml Dateien innerhalb des DocumentRoot ausführbar.

Weiterlesen: ⯈ Apache als Proxyserver

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Auch interessant