Module für den Apache-Webserver
Funktionserweiterung

DeveloperIT-ProjekteNetzwerkeSoftware

Der Webserver Apache 2.0 ist modular aufgebaut. Der Server-Kern bietet nur die notwendigen Basisfunktionen. Alle zusätzlichen Features werden durch Module hinzugefügt.

Module: Statisch und Shared

Module für den Apache-Webserver

Im Grunde ist ein Webserver eine eher triviale Anwendung. Ihre Hauptaufgabe ist die Annahme einer Anfrage eines Clients und die Ausgabe der angeforderten HTML-Datei. Allerdings stiegen im Lauf der Zeit die Anforderungen, und die Software musste mit jeder Version immer neue, zusätzliche Funktionen bieten. Statt das Kernprogramm dafür immer mehr aufzublähen, hat man sich bei der neuesten Version des Apache-Webservers der Methoden modernen Software-Designs bedient und die zusätzliche Intelligenz in Module ausgelagert.

Das neue Prinzip, das in der Apache-Version 2 zum ersten Mal konsequent umgesetzt wurde, kennt neben dem schlanken Kern zwei Arten von Modulen: statische Module, die mit dem Kern zu einem einheitlichen Paket kompiliert werden, und die so genannten Shared Modules, die dynamisch durch entsprechende Direktiven in der Apache-Konfigurationsdatei hinzugefügt werden. Zwar bringt die zweite Methode gewisse Einbußen in der Performance mit sich, jedoch kann man sich dadurch die zeitaufwendige Neukompilierung des Webservers ersparen, wenn man ihn um bestimmte Funktionen erweitern will.

Wie das Prinzip funktioniert, soll im nachfolgenden Beispiel anhand einer Installation von Apache 2 und PHP 5 als Shared Module genauer dargestellt werden.


Webserver installieren

Module für den Apache-Webserver

Bei vielen Linux-Distributionen gehört Apache zum Lieferumfang. Mit dem Verwaltungs-Tool Yast ist der Server bei dieser Variante in wenigen Minuten installiert. Das ist zwar sehr komfortabel, hat aber den Nachteil, dass diese Versionen in der Regel nicht auf dem aktuellen Stand sind und individuelle Anpassungen kaum möglich sind.

Daher ist es durchaus empfehlenswert, die etwas diffizilere Variante zu wählen und eine aktuelle Version des Webservers aus dem Netz zu laden und von Grund auf neu zu installieren. Ein aktuelles Source-Archiv gibt es auf der Seite von www.apache.org. Nachfolgend wird beschrieben, wie Sie auf diese Weise den Webserver sowie die aktuellste PHP-Version als Modul auf Ihrem Linux-System installieren können. Voraussetzung ist natürlich, dass auf Ihrem Linux-System eine Version des Ansi-C-Compilers verfügbar ist.

Nach dem Download entpacken Sie das Apache-Archiv zuerst in ein geeignetes Quellverzeichnis (zum Beispiel /usr/lib/apache). Dann geht es weiter in der Reihenfolge Konfigurieren, Kompilieren und Installieren.


Konfiguration

Module für den Apache-Webserver

Die Konfigurationsparameter befinden sich in der Datei configuration. Als Anfänger oder für einen schnellen Start können Sie die Parameter in der Konfigurationsdatei einfach übernehmen. Wollen Sie sich die Optionen näher ansehen, können Sie dies mit dem Kommando

./configure --help

tun. Sie erfahren auf diese Weise zum Beispiel, welche Module mit eingebunden werden. Starten Sie dann die Konfiguration mit dem Aufruf

./configure --prefix=/wwwroot --enable-so

Mit dem Parameter prefix können Sie das Verzeichnis festlegen, in das Sie Apache installieren wollen. Wenn Sie darauf verzichten, wird der Apache in dem Default-Verzeichnis /usr/local/apache2 installiert.

Mit der zweiten Option enable-so sorgen Sie dafür, dass das Modul so aktiviert wird, das den Apache in die Lage versetzt, die so genannten Shared Modules zu laden. Dies ist wichtig, weil ja anschließend PHP 5 als ein solches Modul kompiliert und eingebunden werden soll.

Mit den Kommandos make und anschließendem make install schließen Sie die Installation des Apache ab. Im voreingestellten Verzeichnis befindet sich anschließend eine lauffähige Version des Webservers.


Der erste Test

Module für den Apache-Webserver

Für einen ersten Test müssen Sie den Webserver natürlich zuerst mit dem Kommando

/usr/local/apache2/bin/apachectl start

starten. Das Verzeichnis kann in Abhängigkeit von der prefix-Option variieren. Für einen Test rufen Sie im Browser einfach http://localhost auf. Verläuft dieser Test erfolgreich, können Sie mit dem nächsten Schritt fortfahren und PHP 5 kompilieren und installieren.


PHP5-Modul nachrüsten

Module für den Apache-Webserver

Die Vorgehensweise ist ähnlich der für Apache beschriebenen Prozedur. Holen Sie sich zuerst von php.net ein aktuelles Sourcen-Archiv der Skriptsprache und entpacken Sie es in ein Verzeichnis Ihrer Wahl. Um die Kommandozeilen abzukürzen, wird im Folgenden einfach davon ausgegangen, dass Sie den Apache in dessen Unterverzeichnis wwwroot installiert haben und PHP im Unterverzeichnis wwwroot/php installiert werden soll.

Wechseln Sie zum Kompilieren in das Verzeichnis, in das Sie PHP entpackt haben. Sie müssen ./configure jetzt mit vier Parametern aufrufen:

./configure --prefix=/wwwroot/php --with-apxs2=/wwwroot/bin/apxs --with-config-file-path=/wwwroot/php --with-mysql

Mit prefix legen Sie wieder das Installationsverzeichnis fest, mit with-apxs2 definieren Sie, dass PHP als Shared Module installiert werden soll, der dritte Parameter gibt den Pfad zum PHP-Konfigurationsfile php.ini an und die letzte Option with-mysql aktiviert den MySQL-Support für PHP. Dies setzt natürlich voraus, dass die Datenbank installiert ist.

Nach Abschluss der Konfiguration können Sie PHP mit make kompilieren. Zu beachten ist, dass vor dem abschließenden make install ein laufender httpd-Dämon gestoppt werden muss.


Nacharbeiten

Module für den Apache-Webserver

Abschließend müssen Sie noch die Konfigurationsdatei httpd.conf mit einem Editor bearbeiten. Die Direktive zum Einbinden des PHP-5-Moduls

LoadModule php5_module modules/libphp5.so

wird bei der Installation automatisch eingefügt. Ergänzen müssen Sie noch eine Direktive, die dafür sorgt, dass Apache den PHP-Parser startet, wann immer ein File mit einer bestimmten Extension, wie zum Beispiel PHP, aufgerufen wird. Dafür sorgt die Direktive

AddType application/x-httpd-php .php


Apache starten

Module für den Apache-Webserver

Um einen ersten Test starten zu können, passen Sie zumindest die beiden Parameter ServerRoot und DocumentRoot an. Dort legen Sie die Verzeichnisse für den Server und die abgelegten HTML-Dokumente fest. Wichtig ist natürlich, dass diese mit den Verzeichnissen korrespondieren, die Sie bei der Installation festgelegt haben.

Jetzt können Sie Apache mit dem Aufruf

PREFIX/bin/apachectl start

für einen ersten Test starten. PREFIX ist dabei wieder durch das Apache-Verzeichnis zu ersetzen. Verlief die Installation erfolgreich, dann müsste beim Aufruf http://localhost die bekannte Apache-Testseite auf dem Bildschirm erscheinen. Für einen ersten PHP-Test legen Sie einfach ein einfaches Skript im Document-Root ab und rufen es über den Browser auf.

Mit dem bekannten Einzeiler

echo $phpinfo();

können Sie zum Beispiel alle Informationen zum neu installierten PHP-Parser via Browser abrufen.


Bekannte Module

Module für den Apache-Webserver

Skriptsprachen wie PHP oder Perl gehören zu den bekanntesten Modulen, mit denen sich der Apache-Webserver erweitern lässt. Daneben gibt es jedoch noch ein umfassendes Angebot an zusätzlichen Funktionserweiterungen.

Kategorisieren lassen sich diese Funktionserweiterungen folgendermaßen:

– Die eigentliche Kernmodule, insbesondere die so genannten Multi-Processing Module.
– Module, die zum Standardpaket von Apache gehören und teils per Default bereits aktiviert oder nicht aktiviert sind.
– Schließlich noch das breite Angebot an Modulen von Drittanbietern, deren Zusammenfassung man unter modules.apache.org findet.

Exemplarisch sollen im Folgenden einige dieser Module und die Funktionen, die sie zur Verfügung stellen, dargestellt werden.


Kompression für Apache

Module für den Apache-Webserver

Der Apache-Webserver beinhaltet ab Version 2 das neue Modul mod_deflate. Das Modul komprimiert die Webseiten vor dem Ausliefern an die Clients. Das Apache-Modul kann auch eingehende Daten dekomprimieren.

Das Modul mod_deflate arbeitet als Filter. Dies bedeutet, dass am Webserver ein und ausgehende Daten dieses Modul passieren. Eingehende Daten werden dabei vom Input-Filter verarbeitet, ausgehende Daten vom Output-Filter. Es können mehrere Filter konfiguriert werden, auch die Reihenfolge der Filter kann dabei explizit festgelegt werden. Eine Beschreibung der Filter unter Apache 2.x finden Sie unter httpd.apache.org/docs-2.0/filter.html.

Mit folgender Direktive in der Apache-Konfigurationsdatei konfigurieren Sie mod_deflate als Ausgangsfilter:

SetOutputFilter DEFLATE

An dieser Stelle ist zu beachten, dass nicht alle Webbrowser die Komprimierung aller Daten unterstützen. Daher kann zum Beispiel mit folgender Direktive festgelegt werden, dass nur HTML-Dateien gepackt werden sollen:



AddOutputFilterByType DEFLATE text/html


Schnelles CGI

Module für den Apache-Webserver

Trotz zahlreicher Alternativen ist das Common Gateway Interface, kurz CGI, nach wie vor eine beliebte Technik für dynamische Web-Inhalte. Da diese CGI-Skripts unter Umständen sehr rechenintensiv sind, gibt es entsprechende Erweiterungen für Apache. Bei Fast CGI (www.fastcgi.com) handelt es sich um eine von der Programmiersprache unabhängige CGI-Erweiterung, die eine hohe Performance ermöglicht, unabhängig von den Limitierungen der Server-APIs. Das entsprechende Apache-Modul mod_fastcgi ist unter Open-Source-Lizenz verfügbar.

Fast-CGI-Applikationen sind schneller, da sie persistent sind und es beispielsweise keinen Initialisierungs-Overhead gibt. Dies ermöglicht es, Applikationen zu entwickeln, die normalerweise nicht in das CGI-Schema passen und unpraktisch beziehungsweise unmöglich wären.

Eine allgemeine Beschreibung des Moduls mod_fastcgi finden Sie unter www.fastcgi.com/ mod_fastcgi/docs/mod_fastcgi.html, eine Installationsanleitung unter der Adresse www.fastcgi.com/mod_fastcgi/INSTALL.


FTP-Server ohne FTP-Server

Module für den Apache-Webserver

Mit Hilfe eines weiteren Moduls lässt sich der Apache-Webserver so konfigurieren, dass er sich für den Besucher ähnlich wie ein FTP-Server verhält. So können Sie beispielsweise einen Teil Ihrer Webseite als reinen Download-Bereich einrichten. Weiterer Vorteil: Seitens Ihrer Besucher ist kein FTP-Client notwendig.

Für die notwendige Funktionalität sorgt das Modul auth_anon. Es ermöglicht einen authentifizierten anonymen Zugriff auf bestimmte Teile einer Webseite. Besonders praktisch ist dies, wenn Sie zahlreiche Dokumente haben, die nicht von den Suchmaschinen indiziert werden sollen.

Zum Aktivieren des Moduls dient die folgende Direktive in httpd.conf:

#LoadModule auth_anon modules/auth_anon.so

Nach einem Neustart des Servers können Sie die Zugriffsrechte festlegen. Dies geschieht entweder über Direktiven in httpd.conf oder über eine .htaccess-Datei im entsprechenden Verzeichnis.


Benutzerrechte

Module für den Apache-Webserver

Legen Sie also nun im zu schützenden Verzeichnis eine Datei .htaccess mit folgendem Inhalt an.


AuthName "anonymous/e-mail"
AuthType Basic
Require valid-user
Anonymous fritz
Anonymous_Authoritative on

Die ersten drei Zeilen mit Direktiven sind Ihnen vielleicht schon vom Modul mod_auth bekannt, das für den regulären Verzeichnisschutz mit .htaccess-Dateien verwendet wird. Die Direktive Anonymous steuert, welche Benutzernamen als anonyme Benutzer betrachtet werden, in obigem Fall ist das der User fritz. Anonymous_Authoritative legt fest, ob nicht autorisierte Benutzernamen und Passwörter mit anderen Authentifizierungsmechanismen weiterverarbeitet werden sollen. Bei on herrscht Anonymität; entweder loggt sich der Benutzer fritz ein, oder der Zugriff wird verweigert.

Wenn Sie stattdessen off verwenden, kommt die Funktionalität von mod_auth zum Einsatz, also die Authentifizierung mit Passwörtern und Gruppen.


Ein Beispiel

Module für den Apache-Webserver

Die unten stehende Konfiguration erlaubt zum Beispiel allen Benutzern das Einsehen der Verzeichnisliste. Alle in der Datei AuthUserFile festgelegten Benutzer können auf alle JPG-Dateien zugreifen, ebenso alle anonymen Benutzer, die sich mit guest und besucher anmelden, sofern sie eine gültige E-Mail-Adresse angeben. Bei der Mail-Adresse wird jedoch lediglich überprüft, ob ein @-Zeichen sowie ein Punkt vorkommen. MP3-Dateien darf nur der Benutzer illegal einsehen:


AuthName "anonymous/e-mail"
AuthType basic
AuthUserFile /test/.htpasswd
Anonymous guest besucher
Anonymous_Authoritative off
Anonymous_VerifyEmail on

Require valid-user


Require user illegal

Selbstverständlich lassen sich zahlreiche weitere Regeln anwenden, etwa eine Zugriffssteuerung nach IP-Adressen.


Dateizugriff per WebDAV

Module für den Apache-Webserver

WebDAV ist eine Erweiterung des HTTP-Protokolls, das die gemeinsame Bearbeitung von Dateien auf entfernten Webservern erlaubt. WebDAV bringt für die praktische Arbeit bei der Entwicklung von Websites und bei der Arbeit in Teams Vorteile:

– Das Publizieren von Webseiten wird dadurch wesentlich vereinfacht. Statt umständlicher Transaktionen via FTP ist eine direkte Bearbeitung der Files auf dem Server möglich.
– Web-DAV unterstützt auch die Arbeit von Teams, die von verschiedenen Standorten aus an einem gemeinsamen Projekt arbeiten und das Web als gemeinsame Datenbasis nutzen. WebDAV ersetzt dort das Verschicken von Dokumenten via E-Mail und das mühsame Zusammenführen von Arbeitsergebnissen.
– Für Content-Management-Systeme ergeben sich durch WebDAV ebenfalls völlig neue Perspektiven. Zahlreiche Funktionen in Sachen Versionskontrolle oder Überschreibschutz stehen mit WebDAV schon serverseitig zur Verfügung.


WebDAV für Apache

Module für den Apache-Webserver

Beim Apache sorgt das Modul mod_dav für die notwendige Funktionalität. Bei der neuesten Apache-Version ist das Modul beim Installationspaket schon dabei. Die Einbindung als Shared Module erfolgt wie üblich über eine entsprechende Direktive in der Konfigurationsdatei httpd.conf:


Loadmodule dav_module modules/mod_dav.so

Dann muss WebDAV noch aktiviert werden. Dies geschieht innerhalb einer Directory- oder Location-Direktive mit der Zeile:

DAV On

Schließlich ist es noch erforderlich, den Pfad zu einer Lock-Datenbank anzugeben:

DAVLockDB /webdav/DAVLock

Diese Datei wird vom Apache angelegt. Ferner sind natürlich noch Sicherheitsaspekte zu beachten.

Sind diese Ergänzungen in der httpd.conf vorgenommen, steht nach einem Restart Apache als WebDAV-Server zur Verfügung.