GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Apache vs. Nginx – Detaillierter Vergleich

Einführung

Webserver sind seit den Anfängen des World Wide Web ein grundlegender Bestandteil des Internets. Webserver-Software empfängt Anfragen von entfernten Clients und versorgt die Clients mit Webseiten, die auf Hardware wie dedizierten Servern gespeichert sind.

In diesem Vergleichsartikel erfahren Sie mehr über die Unterschiede zwischen den beiden heute beliebtesten Open-Source-Webservern – Apache und Nginx.

Über Apache Server

Der Apache HTTP Server (oder kurz Apache) ist eine Open-Source-Webserver-Software, die von der Apache Software Foundation entwickelt wurde. Ursprünglich als prozessbasierter Webserver konzipiert, kann er ab Version 2.0 und der Einführung von Multi-Processing-Modulen sowohl als prozessbasierter als auch als Threaded-Server konfiguriert werden. Die modulare Architektur des Servers ermöglicht auch Funktionen wie eine modulare Protokollverwaltung.

Ein weiteres wesentliches Merkmal der Apache-Architektur sind Filter, die es Modulen ermöglichen, mit den von anderen Modulen erstellten Inhalten zu interagieren. Diese Interaktion umfasst Verschlüsselung, Virenscans und Komprimierung sowohl statischer als auch dynamischer Inhalte.

Hinweis: Der Apache HTTP-Server funktioniert am besten unter Linux. Erfahren Sie, wie Sie Apache unter CentOS installieren. Lesen Sie für Ubuntu How to Install Apache Web Server on Ubuntu. Informationen zur grundlegenden Apache-Webserververwaltung finden Sie hier, wie Sie Apache starten, stoppen und neu starten.

Über Nginx-Server

Nginx (ausgesprochen engine-x) ist ein Open-Source-Webserver, der von Nginx entwickelt wurde, Teil von F5, Inc.
Als HTTP-Server verwendet Nginx eine hochgradig skalierbare ereignisgesteuerte (asynchrone) Architektur, die eine hohe Leistung und einen geringen Speicherbedarf ermöglicht.

Nginx kann auch als Reverse-Proxy, Load Balancer, Mail-Proxy und HTTP-Cache fungieren. In einigen Anwendungsfällen dient Nginx auch als Webbeschleuniger oder SSL/TLS-Terminator.

Hinweis: Wie Apache ist auch Nginx am besten mit Linux kompatibel. Informationen zum Installieren von Nginx unter CentOS finden Sie unter So installieren Sie Nginx unter CentOS. Um es unter Ubuntu zu installieren, lesen Sie How to Install Nginx on Ubuntu. Für grundlegende Nginx-Verwaltungsanweisungen erfahren Sie, wie Sie Nginx starten, stoppen und neu starten.

Apache vs. Nginx:Ein kurzer Überblick

Nachfolgend finden Sie eine kurze Übersicht über die wichtigsten Vergleichspunkte zwischen Apache und Nginx.

Kategorien Apache Nginx
Kosten Kostenlos erhältlich Das Hauptprodukt, OSS Nginx, ist kostenlos erhältlich.

Nginx Plus ist eine kostenpflichtige Option mit Support und zusätzlichen Funktionen.
Lizenzierung Apache-Lizenz 2.0 2-Klausel-BSD-Lizenz
Geschrieben in C, XML C
Betriebssysteme Linux, Microsoft Windows, andere Unix-ähnliche Systeme, OpenVMS Linux, macOS, Microsoft Windows, andere Unix-ähnliche Systeme, HP-UX, IBM AIX
Architektur Modular, prozessbasiert/threaded Modular, ereignisgesteuert
Konfiguration Verteilt Zentralisiert
Interpretation Hauptsächlich dateibasiert Hauptsächlich URI-basiert
Funktionen - Multi-Processing-Module
- Unterstützung der Konfiguration pro Verzeichnis
- Reverse-Proxy mit Caching
- Load-Balancing IPv6-kompatibel
- Unterstützt HTTP/2
- XML-Unterstützung FTP-Unterstützung (mit separatem Modul)
- Bereitstellen von statischen und Indexdateien
- Öffnen Sie den Dateideskriptor-Cache
- Beschleunigtes Reverse-Proxying mit Caching
- Lastausgleich und Fehlertoleranz
- IPv6 unterstützt, standardmäßig nicht aktiviert
- Unterstützt HTTP/2
- Mail-Proxy
- HTTP-Caching
Unterstützung – Apache HTTP Server-Dokumentation
- Apache HTTP Server-Benutzerliste
-IRC
- Paketüberfluss
- Kommerzieller Support durch Drittanbieter
- Von der Community betriebene Mailingliste
-IRC
- Paketüberfluss
- Bezahlter offizieller Support für Nginx Plus

Architektur

Der Apache HTTP-Server verfügt über einen kleinen Serverkern und mehrere Module. Die Module werden entweder statisch kompiliert oder dynamisch geladen.

Beim Booten startet Apache mehrere Serverprozesse. Der Zweck dieser Prozesse besteht darin, die Arbeitslast zu teilen. Der Hauptprozess ist der Elternprozess , während andere untergeordnete Prozesse sind . Jeder untergeordnete Prozess erstellt eine vordefinierte Anzahl von Server-Threads, die eingehende Anfragen verarbeiten.

Um den Server für das Betriebssystem zu optimieren, verwendet Apache das Multi-Processing Module (MPM) . Der Zweck dieses Moduls besteht darin, sich an Netzwerkports zu binden, Anforderungen anzunehmen und die Anforderungsbearbeitung zu verwalten, indem untergeordnete Prozesse zur Ausführung dieser Aufgaben zugewiesen werden. Apache installiert das MPM, das am besten für die Umgebung geeignet ist, abhängig vom erkannten Betriebssystem und seinen Fähigkeiten.

Die Apache Portable Runtime Libraries (APR) sind ein weiterer wichtiger Bestandteil eines Apache-Servers. APRs bieten eine plattformübergreifende Betriebssystemschicht. Diese Ebene dient als universelle API für Entwickler, sodass plattformspezifische Probleme oder Funktionen nicht mehr programmiert werden müssen.

Nginx verfügt über eine ereignisgesteuerte Architektur, die eine einfache Skalierung auf moderner Hardware ermöglicht.

Wie Apache hat Nginx einen primären, Master-Prozess . Der Zweck dieses Prozesses besteht darin, die Portbindung und das Lesen der Konfiguration zu steuern. Im Gegensatz zu Apache werden die vom Master-Prozess erstellten Prozesse jedoch auf der Grundlage eines vorhersagbaren Prozessmodells entworfen, dessen Hauptziel darin besteht, die Hardware-Ressourcen optimal zu nutzen.

  • Der Cache-Loader ist ein Prozess, der beim Start ausgeführt wird und den festplattenbasierten Cache in den Arbeitsspeicher lädt.
  • Der Cache-Manager stellt sicher, dass die Festplatten-Cache-Einträge innerhalb der definierten Größenbeschränkungen liegen.
  • Die Worker-Prozesse Lese- und Schreibvorgänge ausführen und Netzwerkverbindungen verwalten.

Worker-Prozesse beginnen mit dem Zuhören und Warten auf Ereignisse. Immer wenn eine neue eingehende Verbindung angefordert wird, wird ein Ereignis initiiert. Beim Herstellen der Verbindung erstellt Nginx einen Dateideskriptor, der nur wenig Arbeitsprozessspeicher belegt. Diese Funktion macht Nginx wesentlich skalierbarer als Apache, das den prozessbasierten Ansatz verwendet, bei dem jede einzelne Verbindung eine große Menge an Ressourcen verbraucht.

Module

Sowohl Apache als auch Nginx verwenden modulbasierte Ansätze. Die Implementierung ist jedoch unterschiedlich.

Apache verfügt über dynamisch geladene Module, die bei Bedarf verwendet werden können. Der Server unterstützt viele verschiedene Module, sowohl offizielle als auch Drittanbieter. Dies macht Apache zu einer sehr anpassbaren Plattform, die Benutzer an ihre Bedürfnisse anpassen können.

Nginx Module müssen in den Kern integriert werden und können nicht dynamisch geladen werden. Um nicht standardmäßige Module einzubinden, müssen Benutzer ihren Server aus der Quelle kompilieren. Obwohl dieser Mangel an Flexibilität einschränkend erscheinen mag, bedeutet er auch eine bessere Sicherheit, da das Zulassen einer dynamischen Modulintegration Sicherheitsbedenken aufwirft.

Leistung

Durch die Verwendung einer Vielzahl von unterstützten Multi-Processing-Modulen, Apache kann in drei Modi ausgeführt werden:

  • Prozessbasierter Modus.
  • Hybrider Prozess- und Thread-Modus.
  • Hybrid-Event-Modus.

Der Benutzer kann Apache so konfigurieren, wie es seinen Bedürfnissen entspricht. Somit werden Serverressourcen effektiv für einen bestimmten Anwendungsfall genutzt.

Apache bietet eine Reihe von Optimierungen zur Erhöhung des Durchsatzes und der Skalierbarkeit. Einige dieser Optimierungen sind Teil der Standard-Serverkonfiguration, und Serveradministratoren können den Rest je nach den spezifischen Anforderungen ihres Systems konfigurieren. Die Leistungsoptimierung kann viele Konfigurationsprobleme von Apache zur Laufzeit und Kompilierzeit lösen.

Nginx ist ein Webserver, der speziell entwickelt wurde, um Apache zu übertreffen. Dies gelingt ihm in mehreren Kategorien, wie z. B. Verbindungszeit, Anzahl empfangener Anfragen pro Sekunde, Übertragungsrate und Zeitaufwand für die Bearbeitung einer Anfrage.

Serveradministratoren können Nginx weiter auf Leistung optimieren, indem sie die Konfiguration des Servers an die Systemspezifikation anpassen. Das Anpassen von Worker-Prozessen und -Verbindungen, das Aktivieren der Gzip-Komprimierung und das Caching für statische Dateien verbessert die Leistung von Nginx erheblich.

Statischer vs. dynamischer Inhalt

Apache verarbeitet sowohl statische als auch dynamische Inhalte durch Verwendung dynamisch geladener Module und ist nicht von externen Komponenten abhängig.

Während beide Server beim dynamischen Laden von Inhalten eine ähnliche Leistung zeigen, ist Nginx verwendet viel weniger Speicher und verarbeitet etwa viermal mehr Anforderungen pro Sekunde für die Bereitstellung statischer Dateien. Das liegt vor allem daran, dass der Interpreter für dynamische Inhalte kein fester Bestandteil eines Nginx-Servers ist. Stattdessen leitet der Server alle dynamischen Webseitenanforderungen an einen externen Prozess weiter, wartet darauf, dass der Prozess den Inhalt zurückgibt, und stellt den Inhalt dann dem Client bereit. Während dies die dynamische Seitenverarbeitung komplizierter macht, vereinfacht es den Prozess der Bereitstellung statischer Seiten.

Verteilte vs. zentralisierte Konfiguration

Apache Konfiguration verteilt. Der Server bietet Unterstützung für eine .htaccess-Datei, um diese Art der Konfiguration zu erleichtern.

Die .htaccess Datei ist eine Konfigurationsdatei auf Verzeichnisebene, die von mehreren Webservern unterstützt wird und verwendet wird, um Probleme beim Website-Zugriff zu lösen, wie z. B. URL-Umleitung, URL-Verkürzung, Zugriffskontrolle (für verschiedene Webseiten und Dateien) und mehr. Der Hauptvorteil dieses Ansatzes besteht darin, dass Änderungen in .htaccess vorgenommen werden werden sofort in das System übernommen. Das Ändern der Hauptkonfigurationsdatei erfordert einen Systemneustart, um die Änderungen zu übernehmen.

Außerdem wird auf Servern, die mehrere Websites hosten, .htaccess ermöglicht es jedem Benutzer, Änderungen an der Konfiguration seiner Website vorzunehmen, ohne die Hauptkonfigurationsdatei des Servers zu ändern.

Nginx Die Konfiguration ist zentralisiert und unterstützt .htaccess nicht . Der Grund dafür ist die Verwendung von .htaccess hat auch mehrere Nachteile. Ein wichtiger Faktor ist der Leistungsverlust – jedes Mal, wenn ein Server eine HTTP-Anforderung erhält, muss er alle übergeordneten Verzeichnisse überprüfen, die eine .htaccess hosten können Datei, um zu sehen, ob sie sie enthält. Ein weiteres wichtiges Anliegen ist die Sicherheit. Nicht privilegierten Benutzern zu erlauben, die Serverkonfiguration zu ändern, kann unsicher sein, wenn es nicht richtig implementiert wird.

Da es in Nginx keine Konfiguration auf Verzeichnisebene gibt, nehmen Benutzer alle Konfigurationsänderungen vor, indem sie Anweisungen in die Hauptkonfigurationsdatei nginx.conf schreiben . Die Änderungen werden übernommen, nachdem der Server neu geladen wurde.

Verbindungsverarbeitungsarchitektur

Apache verarbeitet Client-Anfragen durch Nutzung seiner Multi-Processing-Module. Der Hauptvorteil davon besteht darin, dass die Verbindungsverwaltungsarchitektur bei Bedarf mühelos ausgetauscht werden kann. Diese Module sind:

  • mpm_prefork_module – Das Prefork-Modul erstellt Prozesse mit einem Thread für jede zu bearbeitende Anfrage. Jeder untergeordnete Prozess kann eine Verbindung unterstützen. Obwohl die Anzahl der erstellten Prozesse größer ist als die Anzahl der Anfragen, funktioniert dieses Modul gut. Das Hauptproblem des Moduls besteht darin, dass große Anfragevolumina die Leistung negativ beeinflussen und den RAM-Verbrauch erheblich erhöhen.
  • mpm_worker_module – Das Worker-Modul erstellt untergeordnete Prozesse. Jeder untergeordnete Prozess verwaltet mehrere Threads, wobei jeder Thread eine Verbindung unterstützt. Da Threads effizienter als Prozesse sind, ist dieses Modul leistungsfreundlicher als das Prefork-Modul.
  • mpm_event_module – Das Event-Modul verfügt über einen ähnlichen Mechanismus wie das Worker-Modul. Es wird jedoch auch versucht, das Problem „Keep Alive“ zu lösen ‘ Problem – die Tatsache, dass Apache nach Abschluss der ersten Anfrage des Clients den gesamten untergeordneten Prozess oder Thread auf weitere Anfragen des Clients warten lässt. Das Event-Modul behandelt dieses Problem, indem es einen designierten Listener-Thread den Zustand der Sockets überwachen lässt.

Nginx behandelt Verbindungen mit einem asynchronen, nicht blockierenden, ereignisgesteuerten Algorithmus. Mithilfe einer Fast-Looping-Funktion können die Worker-Prozesse des Servers viele Verbindungen gleichzeitig verarbeiten, indem sie kontinuierlich nach Ereignissen suchen und diese verarbeiten.

Wenn ein Worker eine Verbindung herstellt, tritt die Verbindung der Ereignisschleife bei, wo sie einer asynchronen Verarbeitung unterzogen wird. Wenn die Verbindung geschlossen wird, verlässt sie die Schleife. Diese Art der Verbindungsbehandlung ermöglicht es Nginx, Ressourcen auf wirtschaftliche Weise zu skalieren und zu nutzen.

Datei vs. URI-basierte Interpretation

Apache interpretiert Anfragen hauptsächlich als Dateisystemressourcen, wobei Directory verwendet wird und File Blöcke. Der Server beginnt mit dem DocumentRoot und versucht, die Datei anhand des Teils der Anfrage zu finden, der auf die Host- und Portnummer folgt.

Apache bietet alternative Möglichkeiten, die Anfrage zu bedienen, wenn die richtige Übereinstimmung nicht gefunden werden kann, indem das Dateisystem durchlaufen wird:

  • Alias ordnet URLs Speicherorten im Dateisystem zu. Es ermöglicht, dass die Dokumente woanders als in DocumentRoot gespeichert werden .
  • Redirect ordnet eine alte URL einer neuen URL zu. Der Server bittet den Client, die gesuchte Ressource an einem anderen Ort zu finden.
  • Location Blöcke ermöglichen das Arbeiten mit URIs.

Im Gegensatz zu Apache, dessen Design in erster Linie die Anforderungen eines Webservers widerspiegelt, ermöglicht die Nginx-Architektur die Verwendung des Servers als Proxy. Daher befasst sich Nginx hauptsächlich mit URIs.

Nginx verwendet Server- und Standortblöcke als primäre Konfigurationsblöcke:

  • Ein Serverblock ist eine Teilmenge der Konfigurationsdatei, die den virtuellen Server für die Bearbeitung von Anfragen definiert. Da virtuelle Server zugewiesen werden können, um bestimmte Verbindungstypen zu handhaben, können Serveradministratoren verschiedene Blöcke für verschiedene Domänennamen, Ports und IP-Adressen zuweisen.
  • Ein Standortblock ist Teil eines Serverblocks, der Anforderungen für verschiedene Ressourcen und URIs verarbeitet. Es leitet Anfragen an die richtige Stelle im Dateisystem weiter.

Da mehrere Blöcke als einzelne Webserverinstanzen fungieren können, verfügt Nginx über ein System, um die beste Übereinstimmung für jede Anfrage zu finden. Dies wird mit listen durchgeführt Direktive, die mögliche Blockübereinstimmungen findet, und server_name Direktive, die die beste Übereinstimmung auswählt.

Wenn Nginx mit statischen Dateien arbeitet, ordnet es Anfragen dem Dateisystem zu. Der Server führt dies jedoch erst aus, nachdem er die Server- und Standortblöcke ausgewählt und den Dokumentenstamm und den URI verbunden hat. Die Tatsache, dass Nginx sich nicht mit dem Dateisystem befasst, bis es bereit ist, die Anfrage zu bedienen, ist ein Grund, warum es keine .htaccess enthält Dateiäquivalent.

Caching

Apache bietet Caching an, um die Leistung eines Servers zu verbessern. Es gibt drei Arten von Caching:

  • Drei-Status-RFC2616-HTTP-Caching bietet intelligentes, HTTP-fähiges Caching beim Umgang mit Proxy-Inhalten oder dynamischen Inhalten, die lokal gespeichert sind.
  • Zwei-Zustand-Key/Value Shared Object Caching bietet Schlüssel/Wert-basierten Cache für gemeinsam genutzte Objekte.
  • Spezialisiertes Datei-Caching ermöglicht das Vorladen von Dateien beim Start, wodurch die Zugriffszeiten für häufig benötigte Dateien verbessert werden.

Nginx erzielt schnellere Ladezeiten und reduziert die Serverlast durch Caching dynamischer Inhalte für schnellen Zugriff. Caching hilft zwar dabei, Websites mit hohem Datenverkehr und Inhaltsvolumen zu beschleunigen, wird jedoch in anderen Szenarien nicht empfohlen.

Grundlegendes Caching in Nginx verwendet nur zwei Direktiven:

  • proxy_cache_path um den Cache-Pfad und die Konfiguration einzustellen und
  • proxy_cache um den Cache zu aktivieren.

Eine nützliche Funktion von Nginx ist die Möglichkeit, den Server so zu konfigurieren, dass er zwischengespeicherte Website-Inhalte anzeigt, wenn der Server ausgefallen oder beschäftigt ist.

Sicherheit

Apache und Nginx gelten beide als sicher. Potentielle Sicherheitsrisiken ergeben sich meist aus einer schlechten Konfiguration. Befolgen Sie daher die Best Practices für die Sicherheit von Webservern, um die Sicherheit zu verbessern:

Für Apache :

  • Passen Sie die Konfiguration an, um DoS-Angriffe zu verhindern. Einige der relevanten Direktiven dafür sind RequestReadTimeout , KeepAliveTimeout und TimeOut .
  • Passen Sie die Berechtigungen auf ServerRoot an Verzeichnisse.
  • Seien Sie vorsichtig mit Server Side Includes (SSI).
  • Seien Sie vorsichtig mit CGI-Skripten.
  • Systemeinstellungen vor .htaccess schützen außer Kraft setzen, indem Sie die Serverkonfigurationsdatei konfigurieren.
  • Sehen Sie sich Ihre Protokolle an.
  • Halten Sie den Server auf dem neuesten Stand.

Für Nginx :

  • Verringern Sie das Risiko potenzieller Schwachstellen-Exploits, indem Sie unerwünschte Module deaktivieren.
  • Deaktivieren Sie die server_tokens Direktive, die Ihre Nginx-Version öffentlich sichtbar macht.
  • Unnötige HTTP-Methoden deaktivieren.
  • Kontrollieren Sie Ressourcen und Limits, um potenzielle DoS-Angriffe zu verhindern.
  • Zugriffs- und Fehlerprotokolle einrichten, konfigurieren und überwachen, um den Zustand des Servers besser zu verstehen.
  • Sicherheitsheader einschließen.
  • Halten Sie den Server auf dem neuesten Stand.

Support und Dokumentation

Apache bietet Community-Support über die Apache HTTP Server Users Mailing List. Support ist auch auf dedizierten IRC-Kanälen, Stack Overflow usw. verfügbar.

Die Apache HTTP Server-Dokumentation bietet Referenzhandbücher, Benutzerhandbücher, Tutorials und andere Dokumente.

Nginx bietet Community-Support, bestehend aus einer von der Community betriebenen Mailingliste und einem Forum sowie anderen Support-Ressourcen wie dem Admin Guide und dem Modules Reference Guide. Kommerzieller Support ist für die kostenpflichtige Option NGINX Plus verfügbar.

Die Open-Source-Nginx-Dokumentation umfasst Installationsanweisungen, Anleitungen, Entwicklungsleitfäden, Modulreferenzen und andere Dokumente.

Apache oder Nginx

Die neuesten Marktforschungsdaten zeigen, dass Apache Nginx leicht voraus ist.

Wenn wir uns jedoch nur die 1000 bestplatzierten Websites ansehen, liegt Nginx mit großem Abstand vorn.

Sowohl Apache als auch Nginx sind ausgefeilte, leistungsstarke Server. Bei der Auswahl des richtigen Servers zur Installation auf Ihrer Hardware müssen Sie berücksichtigen, wofür Sie ihn verwenden werden.

Wählen Sie Apache statt Nginx, wenn:

  • In Ihrem Anwendungsfall ist es vorzuziehen, dass nicht privilegierte Benutzer die Kontrolle über ihre Websites haben. Einer dieser Fälle ist die Verwaltung einer gemeinsam genutzten Hosting-Umgebung, in der Apaches .htaccess Datei wird praktisch unverzichtbar.
  • Sie benötigen bestimmte Module, die Nginx nicht unterstützt.

Wählen Sie Nginx statt Apache, wenn:

  • Ihr Anwendungsszenario umfasst hauptsächlich (oder ausschließlich) die Bereitstellung statischer Inhalte.
  • Sie erwarten ein hohes Verkehrsaufkommen auf Ihrer Website.

Wann sowohl Nginx als auch Apache verwendet werden sollten

Apache und Nginx können nebeneinander verwendet werden, um einen Workload-optimierten Server zu erstellen. Nginx ist so eingerichtet, dass es als Reverse-Proxy für Apache fungiert, der die Verarbeitungsgeschwindigkeit von Nginx und die Fähigkeit zur Bewältigung großer Verkehrsaufkommen nutzt. Nginx verarbeitet und stellt statische Inhalte bereit und leitet dynamische Inhalte an Apache weiter.

Indem Nginx Anfragen sortieren und diejenigen verarbeiten lässt, die es alleine verarbeiten kann, erhält Apache ein geringeres Volumen an Anfragen. Dadurch werden potenzielle Überlastungsprobleme präventiv gelöst. Da Nginx mit einem Serverpool im Backend kommunizieren kann, ist das Hinzufügen weiterer Server und die horizontale Skalierung problemlos möglich.


Ubuntu
  1. PostgreSQL vs. MySQL:Ein detaillierter Vergleich

  2. Hadoop vs. Spark – Detaillierter Vergleich

  3. Apache vs. Nginx:Welchen Webserver sollten Sie wählen?

  4. Installieren Sie WordPress auf Nginx Ubuntu

  5. Installieren Sie Apache unter CentOS 8

So installieren Sie InvoiceNinja auf Ubuntu 18.04 Server mit Apache/Nginx

Installieren Sie Matomo Web Analytics (Piwik) auf Ubuntu 18.04 mit Apache/Nginx

Installieren Sie Matomo Web Analytics (Piwik) auf Ubuntu 20.04 mit Apache/Nginx

So installieren Sie InvoiceNinja auf Ubuntu 20.04 Server mit Apache/Nginx

So installieren Sie Nginx auf Ubuntu

So richten Sie Nginx Cache auf einem LAMP-Server ein