Gerade Server-Admin-Neulinge wollen immer das Neueste und Aktuellste. Das dies nicht immer das Beste ist, ist häufig schwierig und verständlich zu erklären.
Daher hier mal ein Ansatz zum Thema Apache:
Entstehungsgeschichte:
Zuerst war der Unix-Webserver httpd
der NCSA (National Center for Super Computing Applications). Er galt nach gewisser Zeit als der Beste und Schnellste.
Als bei er NCSA die Entwicklung stockte bzw. eingestellt wurde, haben sich immer mehr Entwickler zusammengefunden und Patches dafür geschrieben. So kam es auch nach der Abspaltung von der NCSA zu dem Namen a pa(t)chy
(= Flickwerk).
Laut offizieller Darstellung der heutigen Apache Group, ist der Name aber den amerikanischen Ureinwohnern gewidmet.
Im Dezember 1995 wurde die erste vollständig neue geschriebene Version 1 veröffentlicht. Damals ebenfalls mit dem ursprünglichen Namen httpd
. Die aktuelle Version lautet z.Z. 1.3.37. Meistens wird diese als die 1er Version betitelt.
Ob ein 1er installierbar ist, hängt i.d.R. davon ab, ob die jeweilige Linux-Distribution ein passendes Paket bereitstellt und/oder der Administrator regelmässige Updates einspielt.
Der Apache-Webserver wurde schnell der verbreitetste Webservern. Der Grund lag an der Modularität gegenüber seiner (recht kleinen) Konkurrenz. So konnte man viele Optimierungen an die vorhandene Hardware vornehmen.
Mit einer großen Entwicklergemeinschaft war der Apache überwiegend der einzige Webserver der die volle HTTP-Funktionalität darstellt und z.B. das HTTP/1.1-Protokoll als erstes unterstützte.
Apache stellte damit z.T. über 90% aller installierten Webserver weltweit.
Die im Jahre 1999 gestartete Neuentwickelung der Version 2 (auch als Apache2
benannt) hatte einige Verbesserungen und baute stärker auf Modularität. Zwei wesentliche Änderungen sind für den Erfolg dieser Version zuständig:
a) Verschiedene Speichermodelle (MPM's) wurden erarbeitet und Implementiert.
b) Vorher als standard im Apache-Kern implementiert Funktionen wurden als Modul ausgegliedert.
Vergleich:
Wir fangen mit den Speichermodellen (MPM = Multiprocessing-Module) an:
Die beiden beliebtesten/bekanntesten sind:
MPM-Prefork
Dieses Speichermodell ist der 1er-Version des Apache abgeschaut. Es handelt sich wahrscheinlich um das verbreitetste. Allein wegen der Nutzung des PHP-Moduls. (siehe Worker-MPM)MPM-Worker
Das Worker-MPM benutzt ein Multithreaded Speichermodell. Größter Nachteil: die eingebundenen Module müssen eine entsprechende Multithread-Fähigkeit haben. Ein negatives Beispiel ist PHP.mod_php
ist nicht multithreaded.
Modularität
Hier hat die 2er-Version natürlich seine Nase vorn. Man kann den Apache bis auf ein Minimum reduzieren um den Speicherverbrauch zu optimieren (siehe Minimalistischer Apache). Aber zwischen den Modulen sind gewisse Abhängigkeiten vorgegeben. Es ist recht schwierig wirklich durchzusteigen, welche Module gebraucht werden und welche nicht. Häufig hilft nur ein Trail&Error.
Neue Module sind z.B. die Filter-Module. In Version 1 kann man keine Input- oder Output-Filter setzten. Mit Apache2 ist dies relativ simpel und sogar auch mit Scripten möglich. Man braucht diese also nicht in C schreiben.
Weiterhin läßt sich mit mod_perl
und seiner Apache-API direkt auf jede Ebene von Apache zurück greifen. So kann man z.B. die einzelnen VirtualHost's mit Perl zum Server-Start über eine Datenbank generieren.
Geschwindigkeit
Angeblich ist der 2er deutlich schneller als sein alter Kollege. Der Haken liegt aber im Detail. Ein mit unnötigen Modulen aufgeblasener Apache2 hat auch mehrere Stationen, die pro Request zu durchlaufen sind. Die kosten somit mehr Performance und bremsen den großen Indianer aus.
Ein schön entschlackter Apache2 kann aber zu einem echten Dauerbrenner werden. Insbesondere mit dem MPM-Worker
, der nicht so Speicherhungrig ist.
Fazit:
Wann soll man also zu welcher Version greifen? Und sollte man einen Update auf Apache2 erzwingen obwohl die Linux-Distribution kein passendes Paket anbietet?
Diese Frage ist nicht so leicht zu beantworten. Denn es geht immer darum was man mit seinem Server machen möchte. Kleinere Projekte auf kleinen Servern kommen mit beiden Versionen gut aus. Sobald man Projekte mit vielen Zugriffen hat, sollte man auf einen optimierten Apache2 zurück greifen.
Die std. Einstellungen der Apache-Module ist bei den meisten Distributionen aber absolut überladen. Eine Entschlackung sollte stattfinden bevor der Speicher knapp wird. Auch das Fein-Tuning des Apache sollte eine gewisse Beachtung finden.