Website-Suche

Warum ich Nginx praktisch besser finde als Apache


Laut der letzten Webserver-Umfrage von Netcraft, die Ende 2017 (genauer gesagt im November) durchgeführt wurde, sind Apache und Nginx die am weitesten verbreiteten Open-Source-Webserver im Internet.

Apache ist ein kostenloser Open-Source-HTTP-Server für Unix-ähnliche Betriebssysteme und Windows. Er wurde als sicherer, effizienter und erweiterbarer Server konzipiert, der HTTP-Dienste synchron mit den vorherrschenden HTTP-Standards bereitstellt.

Seit seiner Einführung ist Apache seit 1996 der beliebteste Webserver im Internet. Es ist der De-facto-Standard für Webserver im Linux- und Open-Source-Ökosystem. Neue Linux-Benutzer finden die Einrichtung und Verwendung normalerweise einfacher.

Nginx (ausgesprochen „Engine-x“) ist ein kostenloser, Open-Source-Hochleistungs-HTTP-Server, Reverse-Proxy und ein IMAP/POP3-Proxyserver. Ebenso wie Apache läuft es auch auf Unix-ähnlichen Betriebssystemen und Windows.

Bekannt für seine hohe Leistung, Stabilität, einfache Konfiguration und geringen Ressourcenverbrauch, erfreut es sich im Laufe der Jahre großer Beliebtheit und seine Nutzung im Internet nimmt immer mehr zu. Er ist heute der Webserver der Wahl unter erfahrenen Systemadministratoren oder Webmastern von Top-Sites.

Einige der stark frequentierten Websites, die von betrieben werden:

  • Apache sind: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com und viele mehr.
  • Nginx sind: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud und viele andere.

Es gibt bereits zahlreiche im Internet veröffentlichte Ressourcen zum Vergleich zwischen Apache und Nginx (ich meine eigentlich „Apache vs. Nginx“-Artikel), viele von denen die wichtigsten Funktionen und Vorgänge in verschiedenen Szenarien, einschließlich Leistungsmessungen in Labor-Benchmarks, klar und detailliert erläutert werden. Deshalb wird hier nicht darauf eingegangen.

Im nächsten Teil werde ich lediglich meine Erfahrungen und Gedanken zur gesamten Debatte teilen, nachdem ich Apache und Nginx in Produktionsumgebungen ausprobiert habe, die auf den Anforderungen für das Hosten moderner Webanwendungen basieren Abschnitt.

Gründe, warum ich Nginx praktisch besser finde als Apache

Im Folgenden sind die Gründe aufgeführt, warum ich den Nginx-Webserver gegenüber Apache für die Bereitstellung moderner Webinhalte bevorzuge:

1. Nginx ist leichtgewichtig

Nginx ist einer der leichtgewichtigen Webserver auf dem Markt. Im Vergleich zu Apache, das einen großen Funktionsumfang implementiert, der zum Ausführen einer Anwendung erforderlich ist, nimmt es nur einen geringen Platzbedarf auf einem System ein.

Da Nginx eine Handvoll Kernfunktionen zusammenfasst, ist es auf dedizierte Upstream-Webserver von Drittanbietern wie ein Apache-Backend, FastCGI-, Memcached-, SCGI- und uWSGI-Server oder Anwendungsserver angewiesen, d. h. sprachspezifische Server wie Node.js, Tomcat , usw.

Daher eignet sich seine Speichernutzung weitaus besser für Bereitstellungen mit begrenzten Ressourcen als Apache.

2. Nginx ist für hohe Parallelität konzipiert

Im Gegensatz zur thread- oder prozessorientierten Architektur von Apache (Prozess-pro-Verbindung- oder Thread-pro-Verbindungsmodell) verwendet Nginx eine skalierbare, ereignisgesteuerte (asynchrone) Architektur. Dabei kommt ein haftfähiges Prozessmodell zum Einsatz, das auf die verfügbaren Hardware-Ressourcen zugeschnitten ist.

Es verfügt über einen Master-Prozess (der privilegierte Vorgänge wie das Lesen der Konfiguration und das Binden an Ports ausführt) und der mehrere Arbeits- und Hilfsprozesse erstellt.

Die Arbeitsprozesse können jeweils Tausende von HTTP-Verbindungen gleichzeitig verarbeiten, Inhalte auf die Festplatte lesen und schreiben und mit Upstream-Servern kommunizieren. Die Hilfsprozesse (Cache-Manager und Cache-Loader) können Vorgänge zum Zwischenspeichern von Inhalten auf der Festplatte verwalten.

Dies macht seine Abläufe skalierbar und führt zu einer hohen Leistung. Dieser Designansatz macht es außerdem schnell und günstig für moderne Anwendungen. Darüber hinaus können Module von Drittanbietern verwendet werden, um die nativen Funktionalitäten in Nginx zu erweitern.

3. Nginx ist einfach zu konfigurieren

Nginx verfügt über eine einfache Konfigurationsdateistruktur, die die Konfiguration sehr einfach macht. Es besteht aus Modulen, die durch in der Konfigurationsdatei angegebene Anweisungen gesteuert werden. Darüber hinaus werden Anweisungen in Blockanweisungen und einfache Anweisungen unterteilt.

Eine Blockanweisung wird durch geschweifte Klammern ({ und }) definiert. Wenn eine Blockanweisung andere Anweisungen in geschweiften Klammern enthalten kann, wird sie als Kontext bezeichnet, z. B. Ereignisse, http, Server und Standort.

http {
	server {
		
	}
}

Eine einfache Direktive besteht aus dem Namen und den Parametern, getrennt durch Leerzeichen und endet mit einem Semikolon (;).

http {
	server {
		location / {
				
				## this is simple directive called root
			   	root  /var/www/hmtl/example.com/;

		}
		
	}
}

Sie können benutzerdefinierte Konfigurationsdateien beispielsweise mithilfe der Include-Direktive einbinden.

http {
	server {

	}
	## examples of including additional config files
	include  /path/to/config/file/*.conf;
	include  /path/to/config/file/ssl.conf;
}

Ein praktisches Beispiel für mich war, wie ich es geschafft habe, Nginx einfach so zu konfigurieren, dass mehrere Websites mit unterschiedlichen PHP-Versionen ausgeführt werden, was mit Apache eine kleine Herausforderung darstellte.

4. Nginx ist ein ausgezeichneter Frontend-Proxy

Eine der häufigsten Anwendungen von Nginx ist die Einrichtung als Proxy-Server. In diesem Fall empfängt es HTTP-Anfragen von Clients und leitet sie über verschiedene Protokolle an die oben genannten Proxy- oder Upstream-Server weiter. Sie können auch Client-Anforderungsheader ändern, die an den Proxy-Server gesendet werden, und die Pufferung von Antworten konfigurieren, die von den Proxy-Servern kommen.

Anschließend empfängt es Antworten von den Proxy-Servern und leitet sie an Clients weiter. Im Vergleich zu Apache ist die Konfiguration als Proxyserver wesentlich einfacher, da die erforderlichen Module in den meisten Fällen standardmäßig aktiviert sind.

5. Nginx zeichnet sich durch die Bereitstellung statischer Inhalte aus

Statische Inhalte oder Dateien sind typischerweise Dateien, die auf der Festplatte des Servercomputers gespeichert sind, zum Beispiel CSS-Dateien, JavaScript-Dateien oder Bilder. Betrachten wir ein Szenario, in dem Sie Nginx als Frontend für Nodejs (den Anwendungsserver) verwenden.

Obwohl Nodejs-Server (insbesondere Node-Frameworks) über integrierte Funktionen für die statische Dateiverarbeitung verfügen, müssen sie keine intensive Verarbeitung durchführen, um nicht dynamische Inhalte bereitzustellen. Daher ist es praktisch von Vorteil, den Webserver so zu konfigurieren, dass statische Inhalte direkt bereitgestellt werden Kunden.

Nginx kann statische Dateien aus einem bestimmten Verzeichnis viel besser verarbeiten und verhindern, dass Anfragen nach statischen Assets Upstream-Serverprozesse blockieren. Dadurch wird die Gesamtleistung der Backend-Server deutlich verbessert.

6. Nginx ist ein effizienter Load Balancer

Um eine hohe Leistung und Betriebszeit für moderne Webanwendungen zu erreichen, ist möglicherweise die Ausführung mehrerer Anwendungsinstanzen auf einem einzelnen oder verteilten HTTP-Servern erforderlich. Dies kann wiederum die Einrichtung eines Lastausgleichs erforderlich machen, um die Last zwischen Ihren HTTP-Servern zu verteilen.

Heutzutage ist der Lastausgleich ein weit verbreiteter Ansatz zur Optimierung der Ressourcennutzung des Betriebssystems, zur Maximierung der Flexibilität, zur Reduzierung der Latenz, zur Erhöhung des Durchsatzes, zur Erzielung von Redundanz und zur Einrichtung fehlertoleranter Konfigurationen – über mehrere Anwendungsinstanzen hinweg.

Nginx verwendet die folgenden Lastausgleichsmethoden:

  • Round-Robin (Standardmethode) – Anfragen an die Upstream-Server werden im Round-Robin-Verfahren verteilt (in der Reihenfolge der Liste der Server im Upstream-Pool).
  • am wenigsten verbunden – hier wird die nächste Anfrage per Proxy an den Server mit der geringsten Anzahl aktiver Verbindungen weitergeleitet.
  • ip-hash – hier wird eine Hash-Funktion verwendet, um zu bestimmen, welcher Server für die nächste Anfrage ausgewählt werden soll (basierend auf der IP-Adresse des Clients).
  • Generischer Hash – bei dieser Methode gibt der Systemadministrator einen Hash (oder Schlüssel) mit dem angegebenen Text, Variablen der Anfrage oder Laufzeit oder deren Kombination an. Der Schlüssel kann beispielsweise eine Quell-IP und ein Quell-Port oder ein URI sein. Nginx verteilt dann die Last auf die Upstream-Server, indem es einen Hash für die aktuelle Anfrage generiert und ihn an die Upstream-Server verteilt.
  • Geringste Zeit (Nginx Plus) – weist die nächste Anfrage dem Upstream-Server mit der geringsten Anzahl aktueller Verbindungen zu, bevorzugt jedoch die Server mit den niedrigsten durchschnittlichen Antwortzeiten.

7. Nginx ist hoch skalierbar

Darüber hinaus ist Nginx hoch skalierbar und moderne Webanwendungen, insbesondere Unternehmensanwendungen, erfordern eine Technologie, die hohe Leistung und Skalierbarkeit bietet.

Ein Unternehmen, das von den erstaunlichen Skalierbarkeitsfunktionen von Nginx profitiert, ist CloudFlare. Laut Matthew Prince ist es dem Unternehmen gelungen, seine Webanwendungen so zu skalieren, dass sie mit einer relativ bescheidenen Infrastruktur mehr als 15 Milliarden Seitenaufrufe pro Monat verarbeiten können., Mitbegründer und CEO von CloudFare.

Eine ausführlichere Erklärung finden Sie in diesem Artikel im Nginx-Blog: NGINX vs. Apache: Our View of a Decade-Old Question.

Abschluss

Sowohl Apache als auch Nginx können nicht durcheinander ersetzt werden, sie haben ihre Stärken und Schwächen. Nginx bietet jedoch eine leistungsstarke, flexible, skalierbare und sichere Technologie für den zuverlässigen und effizienten Betrieb moderner Websites und Webanwendungen. Was ist Ihre Meinung? Teilen Sie uns dies über das untenstehende Feedback-Formular mit.