Einführung
A web server’s primary role is to serve web pages for a website. A web page can be rendered from a single HTML file, or a complex assortment of resources fitted together. If you want to host your web application on the internet, in many cases you will need a web server.
Einer der häufigsten Anwendungsfälle für Webserver ist das Bereitstellen von Dateien, die für die Darstellung einer Website in einem Browser erforderlich sind. Wenn Sie http://www.digitalocean.com
besuchen, beginnen Sie mit der Eingabe einer URL, die eine Anfrage über das Internet startet. Diese Anfrage durchläuft mehrere Schichten, von denen mindestens eine ein Webserver sein wird. Dieser Webserver generiert eine Antwort auf Ihre Anfrage, die in diesem Fall die DigitalOcean-Website ist, genauer gesagt die Startseite. Idealerweise geschieht dies schnell und mit einer 24/7-Verfügbarkeit.
Obwohl jeder Besucher der Startseite von DigitalOcean diese als eine einzelne Webseite erlebt, bestehen die meisten modernen Webseiten heute tatsächlich aus einer Kombination vieler Ressourcen. Webserver fungieren als Vermittler zwischen dem Backend und dem Frontend und stellen Ressourcen wie HTML- und CSS-Dateien sowie JSON-Daten bereit, die alle dynamisch generiert oder statisch bereitgestellt werden. Wenn Sie in irgendeiner Weise mit Websites oder Online-Anwendungen arbeiten möchten, ist es äußerst nützlich, sich mit den Grundlagen dessen vertraut zu machen, was ein Webserver ist und wie er funktioniert.
Obwohl der Begriff „Webserver“ sich auf die Software selbst oder die Hardware beziehen kann, auf der sie vorhanden ist, bezieht sich dieser Artikel speziell auf die Webserver-Software. Für weitere Details zu diesem Unterschied sehen Sie sich unsere Einführung in Cloud-Server an.
Übliche Anwendungsfälle
A web server handles requests on the internet through HTTP and HTTPS protocol, and is also called an HTTP server. A web server is distinct from other types of servers in that it specializes in handling these HTTP and HTTPS requests, differentiating itself from application servers (e.g. Gunicorn) and servers for other protocols (i.e. WSGI). These other servers work as intermediaries for backend programming languages through external libraries, which is a different level of abstraction than web servers.
Hier sind einige übliche Aufgaben, die von Webservern behandelt werden:
- Dient HTML-, CSS- und JavaScript-Dateien aus.
- Dient Bilder und Videos aus.
- Behandelt HTTP-Fehlermeldungen.
- Behandelt Benutzeranfragen, oft gleichzeitig.
- Leitet URL-Übereinstimmung und -Umschreibung.
- Verarbeitet und liefert dynamische Inhalte aus.
- Komprimiert Inhalte für optimierten Datenverbrauch und Geschwindigkeit.
- Aktiviert Browser-Caching für Ihre statischen Inhalte.
In praktischer Hinsicht sind hier einige persönliche Projekte, die einen Webserver einbeziehen könnten:
- Sie möchten eine Website erstellen.
- Sie möchten eine App erstellen, die eine Verbindung zum Internet herstellt.
Diese Liste ist keineswegs umfassend, und ein Webserver ist nicht streng auf die Datentypen beschränkt, die er einem Endbenutzer bereitstellen kann. Zum Beispiel antwortet ein Webserver, der Web-API-Anfragen bedient, oft mit Daten in einem Format wie JSON.
Ziele eines Web Servers
Webserver bedienen ein Publikum mit Erwartungen an Geschwindigkeit, Verfügbarkeit, Zuverlässigkeit und mehr. Sie haben den gemeinsamen Zweck, Inhalte im Internet bereitzustellen, und um als tragfähige Lösung für Webserver betrachtet zu werden, müssen die folgenden Aspekte berücksichtigt werden:
- Betriebszeit: Dies bezieht sich auf die Zeit, in der ein Webserver online und betriebsbereit ist. Websites müssen jederzeit online sein, um Benutzer zu bedienen, daher ist eine hohe Betriebszeit das Ziel. Dies übersetzt sich auch in Stabilität und Vorhersehbarkeit. Wenn ein Benutzer eine URL eingibt oder einen Link zu Ihrer Website anklickt, sollte die erwartete Seite jedes Mal und zu jeder Zeit geladen werden. Die einzigen Ausnahmen sollten geplante Ausfallzeiten für Updates oder Wartungsarbeiten sein. Ein Webserver, der fehlerhaft ist oder zu zufälligen Zeiten abstürzt, beeinträchtigt die Benutzererfahrung negativ.
- Geschwindigkeit: Ihre Webseiten sollten so schnell wie möglich geladen werden. Benutzer möchten, dass ihre Anfrage sofort erfüllt wird, sonst riskieren Sie, sie zu verlieren. Auf einer langsam ladenden Webseite, auch wenn der Benutzer die erste Ladung durchsteht, wird jede nachfolgende lange Ladung exponentiell ihre Bereitschaft verringern, zu bleiben oder erneut zu besuchen.
- Parallelität: Dies bezieht sich auf die Bearbeitung mehrerer Anfragen, die gleichzeitig eingehen. Es scheint zwar eine gute Sache zu sein, wenn zu viele Personen gleichzeitig Ihre Website besuchen möchten, aber dies wird zu einem echten Problem, wenn die Ladezeiten auf ein Schneckentempo verlangsamen und Ihr gesamter Server abstürzt. Ihr physischer oder virtueller Server verfügt nur über begrenzte Ressourcen wie RAM und CPU-Rechenleistung, und Webserver müssen diese Ressourcen effizient nutzen.
- Skalierbarkeit: Skalierbarkeit bezieht sich entweder darauf, Ihre vorhandenen Server leistungsfähiger zu machen durch vertikales Skalieren oder mehr Server zu Ihrer Einrichtung hinzuzufügen durch horizontales Skalieren. Wenn Sie Ihr Publikum vergrößern, können Sie einen Punkt erreichen, an dem Sie mehr als ein oder zwei kleine Webserver benötigen.
- Einfachheit bei der Einrichtung: Ein Projekt schnell in Betrieb zu nehmen, ist entscheidend für die Iteration Ihres Projekts. Ein einfacher und wiederholbarer Installationsprozess ist wichtig für den ersten Webserver, den Sie einrichten, und die mehreren Webserver danach, wenn Sie skalieren.
- Dokumentation: Webserver sind komplex. Die gängigsten Setups bringen Sie schnell auf die Beine, aber Ihre Anforderungen werden im Laufe der Zeit wachsen. Oft benötigen Sie Funktionen, die nicht so häufig verwendet werden. Wenn es soweit ist, ist eine gute Dokumentation unerlässlich, um maßgeschneiderte Lösungen für Ihre Bedürfnisse zu erstellen.
- Entwicklerunterstützung: Wenn die Kernentwickler nicht zu ihrem eigenen Projekt verpflichtet sind, sollten Sie Ihr Projekt nicht an ihres binden. Dies umfasst sowohl Pläne für langfristige Unterstützung ihrer Software als auch die unmittelbare kurzfristige Unterstützung, die sie in Form von Fehlerkorrekturen und Patches bereitstellen.
- Community-Unterstützung: Ein Kernentwicklungsteam wird den größten Teil der Arbeit erledigen, aber eine blühende Community trägt dazu bei, Lücken zu schließen. Bei Open-Source-Projekten kann dies Beiträge zum eigentlichen Code-Bestand bedeuten, aber eine starke Community wird auch Ihre Fragen beantworten und bei Ihren spezifischen Problemen helfen.
Während Webserver verschiedene Lösungen anbieten können, stammen die Lösungen, die sie anbieten, aus dem Versuch, dieselben Probleme anzugehen. Diese Probleme selbst entwickeln sich im Laufe der Zeit zusammen mit den Bedürfnissen und Erwartungen des Endbenutzers, was dies zu einer lebendigen und sich ständig weiterentwickelnden Liste macht.
Auswahl einer Webserver-Lösung
Die beliebtesten Open-Source-Webserver sind derzeit Apache und Nginx.
Apache war zuerst da und wurde zu einer Zeit entwickelt, als es üblich war, dass mehrere Websites mit ihren eigenen individuellen Konfigurationsdateien alle auf einem einzelnen Webserver existierten. Nginx kam nach Apache, zu einer Zeit, als sich die Anforderungen von der Bereitstellung mehrerer Websites von einem Server hin zur Bereitstellung einer Website von einem Server auf äußerst effiziente Weise unter Last verschoben.
Obwohl Webserver dieselben Ziele und Probleme teilen, wird die Interpretation und Umsetzung jeder Lösung unterschiedlich sein. Die genauen Antworten auf diese Probleme prägen die Identität einer bestimmten Webserver-Lösung. Nginx und Apache werden hier aufgrund ihrer Allgegenwärtigkeit hervorgehoben, aber jede Webserver-Lösung wird eine eigene Meinung haben. Bei der Auswahl eines Webservers ist es wichtig, Ihre eigenen Bedürfnisse für Ihr spezifisches Projekt im Auge zu behalten. Auf diese Weise bleibt Ihre Methode der Bewertung auch dann verankert, wenn sich das Angebot an Webservern ändert, da sie auf Ihren eigenen Anforderungen basiert.
Hier sind einige wichtige Unterscheidungsmerkmale, wie Webserver versuchen, die Ziele eines Webservers zu erreichen:
Struktur von Konfigurationsdateien
Webserver speichern ihre Einstellungen in Konfigurationsdateien. Sie können Ihre Webserver anpassen, indem Sie diese Dateien bearbeiten. Die Speicherung und Organisation von Konfigurationsdateien ist eine strukturelle Angelegenheit, die Webserverprodukte aufteilt.
Die Hauptunterscheidung besteht zwischen Zentralisierung und Dezentralisierung. Dezentralisierte Konfigurationsdateien ermöglichen eine granulare Steuerungsebene auf Dateisystemebene, die aus der Notwendigkeit resultiert, mehrere Websites auf einem Server zu hosten. Zentralisierte Konfigurationen konzentrieren sich nicht darauf, mehrere Websites auf einem Server zu hosten, sondern darauf, eine einzelne Website effizient zu bedienen. Diese Konfigurationen verlassen sich auf das URI-Musterabgleich, bei dem URLs mit Dateinamen und anderen eindeutigen Identifikatoren abgeglichen werden, anstatt sich auf den Abgleich mit der Verzeichnisstruktur eines Webservers zu verlassen.
Die .htaccess
-Dateien von Apache ermöglichen eine dezentralisierte Konfiguration als Funktion, und jede Designentscheidung ergibt sich aus diesem Fokus auf das Dateisystem mit einer granularen Steuerungsebene. Nginx hat nicht denselben Dateisystem-Fokus und konzentriert sich auf URI-Musterabgleich und zentralisierte Konfiguration.
Behandlung von Parallelität
Die physischen und virtuellen Server, auf denen Sie Webserver betreiben, verfügen über begrenzte Ressourcen wie RAM und CPU-Verarbeitung. Wie Ihr Webserver grundsätzlich seine Anfragen verwaltet, wird den größten Einfluss darauf haben, wie effizient Ihre Ressourcen genutzt werden. Eine einzelne Anfrage kann pro Anfrage einen gesamten Prozess erzeugen oder auf ereignisgesteuerter Basis behandelt werden. Die Kapazität Ihres Webservers, mehrere gleichzeitige Anfragen effizient zu verarbeiten, hängt von grundlegenden Designentscheidungen ab.
Apache behandelt Anfragen, indem es Prozesse erzeugt, was Ressourcen in einem Maße verbraucht, das unter Last zu einem Problem werden kann. Das ereignisgesteuerte System von Nginx verbraucht weniger Ressourcen und kann unter Last performanter sein.
Statische Inhalte bereitstellen
Neben Webseiten erhalten Webserver Anfragen nach anderen Ressourcen wie Bildern, Videos, CSS-Dateien und JavaScript-Dateien. Da diese Elemente unabhängig davon, wer sie anfordert, immer gleich sind, werden sie als statischer Inhalt bezeichnet. Oftmals ist eine Webseite selbst nur eine HTML-Datei, die nicht an die anfordernde Person angepasst ist, und wird ebenfalls als statischer Inhalt behandelt. Webserver können diesen statischen Inhalt auch komprimieren, um die Ladezeiten zu verbessern.
Nginx eignet sich aufgrund seiner ereignisgesteuerten Anfrageverarbeitung besonders gut zum Bereitstellen von statischem Inhalt. Apache kann ebenfalls statischen Inhalt bereitstellen, aber in den meisten Setups nicht mit derselben Geschwindigkeit und Effizienz unter Last wie Nginx.
Bereitstellung von dynamischen Inhalten
Wenn Inhalte geändert, verarbeitet und je nach Anfrage angepasst werden, wird dies als dynamisch bezeichnet. Zum Beispiel füllt eine Website nach Ihrer Anmeldung häufig dynamisch Ihren Benutzernamen in der oberen Navigationsleiste aus. Dynamische Inhalte führen zu zusätzlicher Komplexität, da der Webserver viele Anfragen einzigartig bearbeiten muss, sobald er sie empfängt. Inhalte, die pro Anfrage angepasst werden, können nicht für alle bereitgestellt werden und können nicht universell zwischengespeichert werden.
Die interne Verarbeitung dynamischer Inhalte entfernt eine zusätzliche Abstraktionsebene, die normalerweise die Weitergabe der Anfrage an eine externe Bibliothek erfordern würde. Apache implementiert dynamische Inhaltsverarbeitung nativ, mit beliebten Lösungsstapeln wie LAMP (Linux, Apache, MySQL, PHP). Nginx ist sprachagnostischer, erfordert jedoch externe Bibliotheken wie PHP-FPM, um als ähnliche Lösung für Anwendungsfälle wie den LAMP-Stack zu fungieren.
Fähigkeit zum Reverse Proxy
A reverse proxy sits in front of a traditional web server, becoming an intermediary server that routes HTTP request traffic to web servers behind it. A reverse proxy becomes the gateway that directs traffic between web servers and the internet at large, and often is the layer that directly interfaces with a firewall. While most web servers have reverse proxy capability, Nginx was built and optimized from the ground up to be a robust reverse proxy server.
Die Bedeutung von Nginx im realen Einsatz hängt stark von seinen Reverse-Proxy-Funktionen und seiner Effizienz ab. Viele Server-Setups platzieren mehrere traditionelle Webserver hinter einem Nginx-Reverse-Proxy und verwenden Nginx, um zu bestimmen, welchen Webserver die Anfrage basierend auf der Last oder der Regelkonfiguration senden soll. Diese Zwischenrolle ermöglicht es ihm sogar, in einigen Konfigurationen mit Apache zusammenzuarbeiten, indem er als Reverse-Proxy vor einem traditionellen Apache-Webserver sitzt.
Unterstützungsumgebung
Sowohl Nginx als auch Apache erhalten starke Unterstützung von ihren jeweiligen Entwicklungsteams und der Community. Als die beliebtesten Open-Source-Webserver gibt es reichlich Lernressourcen. Apache wird von der Apache Software Foundation, einer gemeinnützigen Organisation, unterstützt und wird immer kostenlos sein. Der Kern von Nginx ist Open Source, aber begehrte Funktionen sind hinter ihrem Nginx Plus-Produktangebot mit Funktionen wie Upstream-Gesundheitsüberprüfungen, Sitzungsbeständigkeit und erweiterter Überwachung gesperrt.
Alternativen zum traditionellen Webserver
Wenn Sie einen Server möchten, der jederzeit bereit ist, auf eine eingehende HTTP-Anfrage zu reagieren, erledigt ein Webserver diese Aufgabe am besten. Je weiter Sie sich vom Fokus auf das Bedienen von HTTP-Anfragen entfernen, desto weniger ist der Webserver eine ideale Lösung. Dies gilt insbesondere für die zusätzlichen Funktionen, die Webserver bieten. Zum Beispiel können Funktionen wie Caching je nach Einrichtung effizienter auf der Ebene des Reverse-Proxys oder des CDN gehandhabt werden.
Zusätzlich, da sich Entwickler darauf konzentriert haben, Entwicklungressourcen auf die Verwaltung von Webservern zu verwenden, sind Lösungen wie Serverless, Headless CMS und Jamstack als Reaktion darauf entstanden. Diese Lösungen erfordern keinen selbstgehosteten Webserver, sondern abstrahieren die Webserver-Ebene zu externen Diensten. Für Entwickler, die keine granulare oder fortgeschrittene Kontrolle über die Webserver-Ebene benötigen, kann die Entwicklungszeit anderswo konzentriert werden. Für weitere Informationen lesen Sie diesen Artikel über Jamstack mit Headless CMS oder die Implementierung von Full-Stack-Jamstack mit DigitalOcean’s App Platform.
Schlussfolgerung
In diesem Artikel haben Sie eine grundlegende Einführung in Webserver erhalten, wie sie verwendet werden und mit welchen Problemen sie versuchen, umzugehen. Ausgestattet mit diesem Wissen haben Sie sich mit der aktuellen Landschaft der Webserver-Lösungen auseinandergesetzt und Ihr Wissen angewendet, um die Lösung zu finden, die speziell Ihren Bedürfnissen entspricht. Um mehr darüber zu erfahren, wie man einen Webserver einrichtet und verwendet, schauen Sie sich den Rest unserer Cloud Curriculum-Serie zu Webservern an.
Zusätzliche Ressourcen
Tutorials:
- So installieren Sie Apache: Schritt-für-Schritt-Anleitung zur Einrichtung Ihres ersten Apache-Servers. Diese Lösung zeichnet sich durch dezentrale Konfiguration für eine granulare Steuerung und interne Verarbeitung dynamischer Webseiten mit Anbindungen an beliebte Programmiersprachen wie PHP aus.
- So installieren Sie Nginx: Schritt-für-Schritt-Anleitung zur Einrichtung Ihres ersten Nginx-Servers. Diese Lösung zeichnet sich durch zentrale Konfiguration, Bereitstellung von statischen Assets, Funktion als Reverse-Proxy und Handhabung von hohem gleichzeitigen Traffic aus.
- Apache vs Nginx: Praktische Überlegungen: Ein eingehenderer Blick auf die beiden Hauptakteure in der Landschaft der Webserver-Lösungen.
DigitalOcean Produkte:
- DigitalOcean Droplets: Virtuelle private Server, um Webserver zu testen und bereitzustellen.
- DigitalOcean Funktionen: Serverlose Lösung, die eine Alternative zu virtuellen privaten Servern sein kann. Verzichten Sie auf die Wartung von Servern und konzentrieren Sie sich auf Ihren Anwendungscode.
Source:
https://www.digitalocean.com/community/conceptual_articles/introduction-to-web-servers