Apache vs. nginx

Apache und nginx liefern beide zuverlässig Websites aus. Sie arbeiten aber unterschiedlich, und das merkst du vor allem bei .htaccess, PHP und vielen gleichzeitigen Verbindungen.

Redaktion Webspacevergleich.net Stand: 6 Minuten Lesezeit

Die Frage „Apache oder nginx?“ stellt sich erst, wenn du einen eigenen Server betreibst. Auf einem Webhosting-Paket hat der Hoster sie schon für dich beantwortet. Wer einen vServer aufsetzt, muss sich aber entscheiden, und beide Programme haben gute Gründe auf ihrer Seite.

Vorweg: Die Zeiten, in denen Apache als schwerfällig galt und nginx als zehnmal schneller, sind vorbei. Viele Vergleiche aus den 2010er Jahren maßen Apache mit dem alten prefork-Modell und eingebautem PHP. Mit aktueller Konfiguration liegen beide Server viel näher beieinander. Die Unterschiede liegen heute eher in der Bedienung.

Zwei Architekturen

Apache: Multi-Processing-Module

Der Apache HTTP Server, kurz httpd, lagert die Frage, wie er Verbindungen auf Prozesse und Threads verteilt, in sogenannte Multi-Processing-Module (MPM) aus. Es kann immer nur eines aktiv sein.

  • prefork startet für jede Verbindung einen eigenen Prozess ohne Threads. Das ist robust, braucht aber viel Speicher. Nötig ist es nur für Module, die nicht threadsicher sind, vor allem das klassische mod_php.
  • worker kombiniert mehrere Prozesse mit je mehreren Threads. Ein Thread bedient eine Verbindung.
  • event baut auf worker auf, gibt Threads aber frei, solange eine Keep-Alive-Verbindung nur wartet. Ein eigener Listener-Thread übernimmt diese ruhenden Verbindungen.

Welches MPM ab Werk aktiv ist, hängt von Plattform und Paket ab (Übersicht in der Apache-Dokumentation). Debian und Ubuntu nutzen event, wechseln aber auf prefork, sobald du das Paket für mod_php installierst.

nginx: Ereignisschleife

nginx startet einen Master-Prozess und wenige Worker, meist einen pro CPU-Kern. Jeder Worker verwaltet tausende Verbindungen in einer einzigen Ereignisschleife, statt jeder Verbindung einen Thread zuzuteilen. Der Speicherbedarf wächst deshalb kaum mit der Zahl der Verbindungen. Wie das genau funktioniert, steht im Artikel Was ist nginx?.

Apache mit event-MPM nähert sich diesem Modell an. Sobald aber eine Anfrage tatsächlich bearbeitet wird, belegt sie bei Apache einen Thread. nginx bleibt bei sehr vielen gleichzeitigen, langsamen Verbindungen sparsamer.

.htaccess: der größte Unterschied im Alltag

Apache kann Konfiguration aus .htaccess-Dateien lesen, die direkt im Webverzeichnis liegen. Umleitungen, Passwortschutz, Rewrite-Regeln für WordPress oder Shopsysteme: alles lässt sich dort eintragen, ohne Root-Rechte und ohne Neustart. Genau das macht Apache für Shared Hosting so praktisch.

Der Preis: Apache sucht bei jeder Anfrage in jedem Verzeichnis auf dem Weg zur Datei nach einer .htaccess und wertet sie aus. Die Apache-Dokumentation selbst rät, die Dateien nur zu nutzen, wenn du keinen Zugriff auf die Hauptkonfiguration hast. Seit Version 2.4 steht AllowOverride standardmäßig auf None, .htaccess ist also erst nach Freischaltung aktiv.

nginx kennt so etwas gar nicht. Alle Regeln stehen in der zentralen Konfiguration, die beim Start einmal gelesen wird. Jede Änderung braucht Root-Zugriff und ein nginx -s reload. Für einen Server, den du allein verwaltest, ist das kein Nachteil. Für einen Hoster mit tausenden Kunden schon.

PHP: mod_php oder PHP-FPM

Früher lief PHP bei Apache meist als Modul (mod_php) direkt im Webserver-Prozess. Das ist einfach einzurichten, hat aber zwei Haken. Jeder Apache-Prozess trägt den PHP-Interpreter mit sich, auch wenn er nur ein Bild ausliefert. Und weil das übliche PHP nicht threadsicher gebaut ist, zwingt mod_php Apache in das speicherhungrige prefork-Modell.

Der heute übliche Weg ist PHP-FPM, ein eigenständiger Dienst mit einem Pool von PHP-Prozessen. Apache spricht ihn über mod_proxy_fcgi an, nginx über fastcgi_pass. Damit kann Apache das event-MPM nutzen, und die PHP-Prozesse laufen getrennt vom Webserver, bei Bedarf sogar unter verschiedenen Benutzern je Website.

Unter Debian und Ubuntu schaltest du Apache so um (die Versionsnummer an deine PHP-Version anpassen, auf Debian 13 ist es 8.4):

sudo apt install php8.4-fpm
sudo a2dismod php8.4
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event proxy_fcgi setenvif
sudo a2enconf php8.4-fpm
sudo systemctl restart apache2

War mod_php nie installiert, meldet a2dismod nur, dass das Modul nicht existiert. Das ist unbedenklich.

Bei der PHP-Geschwindigkeit selbst gibt es dann keinen Unterschied mehr zwischen den beiden Webservern. Sie reichen die Anfrage nur durch, die Arbeit macht PHP-FPM.

Statische Dateien

Bilder, CSS, JavaScript und Schriften liefert nginx sehr effizient aus. Er nutzt dafür sendfile, wobei der Kernel die Datei direkt ins Netzwerk schreibt, und hält dank Ereignisschleife viele parallele Downloads mit wenigen Prozessen. Apache kann sendfile ebenfalls nutzen und ist mit event-MPM auch nicht langsam. Bei hoher Last und vielen gleichzeitigen Verbindungen braucht er aber mehr Speicher.

Für eine kleine Website spielt das keine Rolle. Bei einer Seite mit viel Traffic auf einem knapp bemessenen vServer kann es den Unterschied machen, ob du ein größeres Paket brauchst.

Vergleichstabelle

Apache httpd nginx
Verbindungsmodell MPM: prefork, worker oder event Ereignisschleife in wenigen Workern
Dezentrale Konfiguration .htaccess je Verzeichnis keine, nur zentrale Dateien
PHP-Anbindung mod_php oder PHP-FPM über mod_proxy_fcgi nur extern, meist PHP-FPM
Module zur Laufzeit ladbar (a2enmod) dynamische Module seit 1.9.11, viele fest einkompiliert
Statische Dateien gut, mit event-MPM ordentlich sehr effizient, wenig Speicher
Reverse Proxy möglich mit mod_proxy eine der Hauptaufgaben
Konfigurationsstil XML-ähnliche Blöcke wie <VirtualHost> Blöcke mit geschweiften Klammern
Typischer Einsatz Shared Hosting, Anwendungen mit .htaccess Reverse Proxy, Load Balancer, eigene Server

nginx vor Apache

Beide Server schließen sich nicht aus. Eine verbreitete Aufteilung: nginx nimmt alle Verbindungen an, terminiert TLS und liefert statische Dateien selbst aus. Nur Anfragen für dynamische Inhalte gehen an Apache, der auf einem internen Port lauscht und weiter .htaccess auswertet.

location / {
    try_files $uri @apache;
}

location @apache {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

Damit Apache die echte Besucher-IP sieht und nicht 127.0.0.1, aktivierst du dort mod_remoteip und trägst nginx als vertrauenswürdigen Proxy ein.

Was Shared Hoster einsetzen

Bei klassischem Webhosting ist Apache nach wie vor sehr verbreitet, meist mit PHP-FPM oder ähnlichen Lösungen, die jede Kundenseite unter einem eigenen Benutzer ausführen. Der Grund ist die .htaccess: Ohne sie funktionieren viele Anleitungen, Plugins und Shopsysteme nicht so, wie ihre Nutzer es erwarten. Häufig steht nginx als Proxy davor. Einige Anbieter setzen auch auf LiteSpeed, das .htaccess versteht und intern ereignisbasiert arbeitet.

Welchen Webserver ein Hoster verwendet, steht nicht immer in der Tarifbeschreibung. Für deine Website zählt vor allem, dass .htaccess funktioniert, wenn deine Software sie braucht. Bei WordPress-Hosting kommen Caching und PHP-Version dazu.

Welcher Server für deinen vServer passt

Nimm nginx, wenn du mehrere Anwendungen hinter einem Proxy bündeln willst, wenn Node.js, Python oder Container im Spiel sind oder wenn der Server wenig Arbeitsspeicher hat. Für WordPress mit PHP-FPM ist nginx ebenfalls eine gute Wahl, sofern du die paar Rewrite-Regeln einmal selbst einträgst.

Bleib bei Apache, wenn deine Software ausdrücklich auf .htaccess setzt oder du Anleitungen folgst, die für Apache geschrieben sind. Mit event-MPM und PHP-FPM ist Apache für die meisten Websites schnell genug. Fängst du aber bei null an, ist nginx der schlankere Ausgangspunkt.

Und wenn dir beides zu viel Pflege ist: Ein Webhosting-Paket nimmt dir die Entscheidung ab.

Günstige Tarife: vServer

  1. STRATO

    VPS S (Linux V-Server)

    vServer 1 Jahr Laufzeit

    CPU
    1 Kern
    RAM
    2 GB
    Speicher
    60 GB NVMe
    Traffic
    unbegrenzt (bis 1.000 MBit/s)

    ab 2,00 €/Monat

    3 Monate, danach 4,00 €

    Ø 3,75 € über 24 Monate

    Zum Tarif
    • KVM-Virtualisierung
    • 1 vCore, 2 GB RAM, 60 GB NVMe
    • n8n-Automatisierung
    • Bei 1 Monat Laufzeit: 4 €/Monat + 9 € Einrichtung
    Speicherart
    NVMe
    Domains inkl.
    keine
    Backup
    nicht inbegriffen
    Laufzeit
    1 Jahr Laufzeit
    Einrichtung
    keine Gebühr
    Geprüft
  2. IONOS

    VPS S+

    vServer Laufzeit ohne Angabe

    CPU
    1 Kern
    RAM
    2 GB
    Speicher
    60 GB NVMe
    Traffic
    unbegrenzt (bis 1 Gbit/s)

    ab 2,00 €/Monat

    3 Monate, danach 5,00 €

    Ø 4,63 € über 24 Monate

    Zum Tarif
    • 1 vCore, 2 GB RAM
    • 60 GB NVMe
    • Linux, Root-Zugriff
    • KI-Assistent im Cloud Panel
    Speicherart
    NVMe
    Domains inkl.
    keine
    Backup
    optional (Cloud Backup ab 6 Cent/GB/Monat)
    Laufzeit
    Laufzeit ohne Angabe
    Einrichtung
    keine Gebühr
    Geprüft
  3. Contabo

    Cloud VPS 4

    vServer monatlich kündbar

    CPU
    4 Kerne
    RAM
    8 GB
    Speicher
    100 GB SSD
    Traffic
    Unbegrenzt (Fair Use)

    ab 5,24 €/Monat

    24 Monate, danach 6,55 €

    Ø 5,24 € über 24 Monate

    Zum Tarif
    • 4 vCPU-Kerne (geteilt), 8 GB RAM
    • 200 Mbit/s-Port, DDoS-Schutz und Firewall inklusive
    • 1 Snapshot(s) inklusive
    • IPv4 und IPv6 inklusive
    Speicherart
    SSD
    Domains inkl.
    keine
    Backup
    Auto Backup als Add-on (3,99 € netto/Monat lt. Konfigurator)
    Laufzeit
    monatlich kündbar
    Einrichtung
    keine Angabe
    Geprüft
  4. dogado

    Cloud Server S 4.0

    vServer 1 Jahr Laufzeit

    CPU
    2 Kerne
    RAM
    4 GB
    Speicher
    100 GB NVMe
    Traffic
    1.000 Mbit/s Bandbreite

    ab 0,99 €/Monat

    6 Monate, danach 6,99 €

    Ø 5,49 € über 24 Monate

    Zum Tarif
    • 2 vCPU, 4 GB RAM
    • 1.000 Mbit/s Bandbreite
    • 30 Tage Geld-zurück-Garantie
    • Alternativ monatlich kündbar für 8,99 €
    Speicherart
    NVMe
    Domains inkl.
    keine
    Backup
    Backup Service optional (Aufpreis)
    Laufzeit
    1 Jahr Laufzeit
    Einrichtung
    keine Gebühr
    Geprüft

Alle 39 Tarife vergleichen

Häufige Fragen

Kann ich Apache und nginx gleichzeitig auf einem Server betreiben?

Ja, aber nicht beide auf Port 80 und 443. Üblich ist, dass nginx die öffentlichen Ports belegt und Apache auf einem internen Port wie 127.0.0.1:8080 lauscht. nginx reicht dann alle oder nur bestimmte Anfragen per proxy_pass an Apache weiter.

Wie übertrage ich .htaccess-Regeln nach nginx?

Von Hand. Umleitungen werden zu return 301 …, Rewrite-Regeln zu rewrite oder try_files, Zugriffssperren zu deny all in einem location-Block. Online-Konverter liefern einen Anfang, das Ergebnis solltest du aber Zeile für Zeile prüfen und mit nginx -t testen.

Welcher Webserver ist sicherer?

Keiner von beiden ist grundsätzlich sicherer. Beide werden aktiv gepflegt und bekommen Sicherheitsupdates über die Distribution. Mehr Einfluss haben eine aktuelle Version, wenige aktivierte Module und eine saubere Konfiguration.

Was ist LiteSpeed?

LiteSpeed Web Server ist ein kommerzieller Webserver, der .htaccess und Apache-Konfiguration versteht, intern aber ereignisbasiert arbeitet. Einige Hoster nutzen ihn deshalb als Ersatz für Apache. Für WordPress gibt es ein eigenes Cache-Plugin, das nur auf LiteSpeed seine volle Wirkung entfaltet.

Weiterlesen