Neues im Apache Webserver 2.4

Gut sechs Jahre nach dem letzten Major Update bringt Version 2.4 des meist genutzten Webservers eine ganze Reihe von Neuerungen: Das Multi-Processing-Modul Event verbessert Skalierbarkeit und Performance, die Konfiguration wurde vereinheitlicht und erweitert, das Logging ist deutlich flexibler.

In Pocket speichern vorlesen Druckansicht 52 Kommentare lesen
Lesezeit: 15 Min.
Von
  • Rainer Jung
  • Dr. Oliver Diedrich
Inhaltsverzeichnis

Siebzehn Jahre nach dem ersten Release und mehr als sechs Jahre nach dem letzten Major Update hat die Apache Software Foundation das lange erwartete erste Release des Apache HTTP Server 2.4 zur generellen Benutzung freigegeben. Nachdem in den letzten Monaten bereits einige Beta-Releases veröffentlicht worden waren und das geplante erste Release 2.4.0 wegen einer notwendigen Fehlerkorrektur nicht zustande kam, stellt Version 2.4.1 das erste allgemein verfügbare Release von Apache 2.4 dar.

Es enthält nicht nur etliche neue Funktionen, sondern ist gleichzeitig auch performanter bei verringertem Ressourcenverbrauch. Darüber hinaus wurden auch einige Eigenschaften verbessert, die vor allem Systemadministratoren ansprechen werden.

Auch wenn Apache laut Netcraft nach wie vor mit Abstand der mit Abstand meist genutzte Webserver ist, sind in den letzten Jahren doch zunehmend alternative Webserver aufgetaucht und in speziellen Anwendungsbereichen auch recht erfolgreich geworden – bekannte Beispiele sind nginx und lighttpd. Als Vorteile wird meist ihre Performance ins Feld geführt, insbesondere die bessere Skalierbarkeit. Apache hat nun – insbesondere unter Linux und den unterstützten Unix-Varianten – ebenfalls einen großen Schritt in Richtung bessere Skalierbarkeit getan.

Zu den bekannten Verarbeitungsmodellen Prefork (ein Prozess pro Client-Verbindung) und Worker (ein Thread pro Client-Verbindung) kommt das Muti-Processing-Modul (MPM) Event hinzu. Das Event-MPM erlaubt das Freigeben von Verarbeitungs-Threads, wenn auf einer Verbindung keine Request-Daten zur Verarbeitung anstehen. Weiterhin implementiert das Event-MPM das asynchrone Senden von Content zum Client. Beide Verbesserungen sorgen dafür, dass Apache nun wesentlich weiter skaliert, insbesondere was TCP-Verbindungen angeht. Dies wird immer wichtiger, da neue Webanwendungen zunehmend Kommunikationsformen etablieren, die mit vielen – häufig aber inaktiven – Verbindungen arbeiten. Das Event-MPM ist aber auch im klassischen Web-Betrieb in Verbindung mit HTTP Keep-Alive sehr nützlich.

Das Event-MPM gab es zwar schon in Apache 2.2, dort galt es aber noch als experimentell. Es wurde für 2.4 stark überarbeitet und verbessert. Leider steht es auf der Plattform Windows nicht zur Verfügung. Eine weitere Einschränkung ist zur Zeit, dass die Vorteile des Event-MPM bei der Verarbeitung von HTTPS-Verbindungen nicht zum Tragen kommen.

Im Bereich Performance gibt es aber noch eine andere Verbesserung: Der Webserver benötigt nun in den meisten Anwendungsfällen deutlich weniger Speicher. Dies liegt vor allem daran, dass er allozierten Speicher schneller an das Betriebssystem zurück gibt. Das sehr aggressive Memory-Caching von Apache hatte in der Vergangenheit immer wieder zu Klagen über seinen hohen Speicherbedarf geführt. Dies sollte sich mit 2.4 deutlich verbessert haben.

Viele Verbesserungen betreffen die Konfigurierbarkeit. Besonders hervorzuheben ist hier der neue Expression Parser, der die verschiedenen Optionen zum Arbeiten mit Ausdrücken in der Konfiguration vereinheitlicht und zugleich erweitert. Beispiele hierfür sind die Direktiven RewriteCond, SetEnvIf und SSLRequire, aber auch die Verwendung von Ausdrücken bei Zugriffsbeschränkungen. Wer hat sich nicht schon geärgert, dass man zwar in Allow und Deny als Bedingung Netzwerkadressen mit Netzmasken angeben konnte, nicht jedoch an anderen Stellen? Dies wurde nun komplett vereinheitlicht: Alle Ausdrücke stehen an allen Stellen zur Verfügung. Zudem sind neue Ausdrücke hinzugekommen, etwa Regular Expressions, File Globs und numerische Vergleiche.

Die Stärke des neuen Expression Parsers kommt besonders zum Tragen in Verbindung mit der neuen If-Direktive, die es erlaubt, Konfigurationsblöcke abhängig von Eigenschaften einzelner Requests zu aktivieren. Die Eigenschaften sind beliebige Ausdrücke – die Zugehörigkeit der Client-IP zu einem bestimmten Netz beispielsweise oder das Vorhandensein eines bestimmten HTTP-Headers.

Schließlich erlaubt Apache 2.4 die Definition von Variablen innerhalb der Konfiguration mittels der Define-Direktive. Das erleichtert die Verwendung von Konfigurations-Templates, indem man Werte, die abhängig von der Umgebung angepasst werden müssen, in Variablen auslagert, die in einem separaten Include mittels Define definiert werden.

Die eigentliche Stärke von Apache liegt in seiner Modularität. Im neuen Release sind rund 40 neue Module hinzugekommen. Insgesamt bringt der Apache-Webserver nun etwa 120 Module mit. Viele weitere Module stehen über die Module Registry zur Verfügung.

Die meisten neuen Module erweitern die Proxy-Fähigkeiten des Apache. Hierzu gehören mod_sed und mod_proxy_html. Beide schreiben Antworten bei der Auslieferung dynamisch um, etwa wenn ein via Reverse Proxy angebundener Backend-Dienst in seinen Antworten URLs in Links verwendet, die von außen anders angesprochen werden müssen. Das Modul mod_sed unterstützt alle Möglichkeiten des aus der Unix-Welt bekannten Programms sed (Streamline Editor), von Suchen und Ersetzen bis zum Einfügen und Anhängen von Zeilen rund um ein gefundenes Muster. Das Modul mod_proxy_html benutzt einen HTML-Parser, um Ersetzungen auf der Ebene spezifischer HTML-Tags beschreiben zu können. Dieses Modul war schon länger extern verfügbar und liegt jetzt dem Webserver bei.

Zwei weitere Kommunikationsmuster mit Proxy-Backends werden unterstützt. Als Alternative zum großen Modul mod_fcgid wurde ein einfaches Proxy-Modul mod_proxy_fcgi aufgenommen. mod_proxy_fdpass reicht die rohe Client-Verbindung an einen externen Prozess zur Weiterverarbeitung weiter. Hier laufen die Antwortpakete direkt vom externen Prozess zum Client, nicht wie bei den anderen Proxy-Modulen erst zu Apache und von dort zum Client. Wie immer bei mod_proxy sind diese Protokoll-Module frei mit anderes Features wie dem schon seit Apache 2.2 verfügbaren Load Balancing kombinierbar.

Die Unterstützung großer IT-Landschaften wurde in mod_proxy weiter verbessert. Die Implementierungen der verschiedenen Load-Balancing-Verfahren wurden als sogenannte Provider herausgelöst. Damit ist es sehr viel leichter möglich, weitere Implementierungen von dritter Seite bereitzustellen. Eine neue Implementierung ist die Lastverteilungsmethode Heartbeat. Hierbei melden die Knoten einer Backend-Farm dem Webserver in regelmäßigen Abständen über das Heartbeat-Protokoll ihre Existenz und Auslastung. Der Webserver erfährt so dynamisch, welche Knoten verfügbar sind, und kann zugleich die aktuelle Auslastung bei der Lastverteilung berücksichtigen.

Das neue Modul mod_proxy_express erlaubt sehr umfangreiche Proxy-Regeln, wie sie etwa auf einem HTTP-Router notwendig werden. Das Modul liest seinen Regelsatz aus einer DBM-Datei.

Bei Einsatz von HTTPS kann mod_ssl erstmals per Online Certificate Status Protocol (OCSP) Zertifikate online überprüfen. Weiterhin unterstützt mod_ssl nun auch die verteilte Nutzung von SSL-Sessions in Server-Farmen durch Replikation über Memcached.

Steht Apache hinter einem Proxy, sieht der Webserver als Client-IP-Adresse lediglich die des Proxies und nicht die des eigentlichen Clients, sodass die IP-Adresse des Clients nicht zur Zugriffsbeschränkung eingesetzt werden kann und bei Störungsanalysen in den Access-Logs fehlt. Das Modul mod_remoteip ermöglicht Apache, die Proxy-IP transparent gegen die eigentliche Client-IP auszutauschen. Dabei ist es möglich, eine Liste von vertrauenswürdigen Proxies anzugeben.