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 eine oder mehrere ein Webserver sein können. Dieser Webserver generiert eine Antwort auf Ihre Anfrage, die in diesem Fall die DigitalOcean-Website ist, speziell die Homepage. Idealerweise geschieht dies schnell und mit einer Verfügbarkeit von 24/7.
Obwohl jeder Besucher der DigitalOcean-Homepage 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 bis hin zu JSON-Daten bereit, die alle dynamisch generiert oder statisch bereitgestellt werden. Wenn Sie beabsichtigen, in irgendeiner Weise mit Websites oder Online-Apps zu arbeiten, ist es äußerst nützlich, sich mit den Grundlagen dessen vertraut zu machen, was ein Webserver ist und wie er funktioniert.
Während der Begriff „Webserver“ sich entweder auf die Software selbst oder die Hardware beziehen kann, auf der sie existiert, bezieht sich dieser Artikel speziell auf die Webserver-Software. Für weitere Details zu diesem Unterschied werfen Sie einen Blick auf unsere Einführung in Cloud-Server.
Allgemeine 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 häufige Aufgaben, die von Webservern bearbeitet werden:
- Dient HTML-, CSS- und JavaScript-Dateien.
- Dient Bildern und Videos.
- Behandelt HTTP-Fehlermeldungen.
- Verarbeitet Benutzeranfragen, oft gleichzeitig.
- Leitet URL-Übereinstimmungen und -Umleitungen.
- Verarbeitet und serviert dynamische Inhalte.
- Komprimiert Inhalte für optimierte Datenverwendung und Geschwindigkeit.
- Aktiviert Browser-Caching für Ihre statischen Inhalte.
In praktischer Hinsicht sind hier einige persönliche Projekte, die einen Webserver einbeziehen würden:
- 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 strikt 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 zielen auf ein Publikum mit Erwartungen an Geschwindigkeit, Verfügbarkeit, Zuverlässigkeit und mehr ab. Sie haben den gemeinsamen Zweck, Inhalte im Internet bereitzustellen, und um als geeignete Lösung für einen Webserver betrachtet zu werden, müssen die folgenden Aspekte berücksichtigt werden:
- Verfügbarkeit: Dies bezieht sich auf die Zeit, die ein Webserver online und betriebsbereit ist. Websites müssen jederzeit online sein, um Benutzer zu bedienen, daher ist eine hohe Verfügbarkeit das Ziel. Dies bedeutet auch 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 Erfahrung Ihrer Benutzer nachteilig.
- Geschwindigkeit: Ihre Webseiten sollten so schnell wie möglich geladen werden. Benutzer möchten ihre Anfragen sofort erfüllt haben, da Sie sonst Gefahr laufen, sie zu verlieren. Auf einer langsam ladenden Webseite wird selbst wenn der Benutzer die erste Ladung durchhält, jede darauf folgende lange Ladung exponentiell die Bereitschaft verringern, zu bleiben oder erneut zu besuchen.
- Gleichzeitigkeit: Dies bezieht sich auf die Bearbeitung mehrerer Anfragen, die gleichzeitig eingehen. Es scheint wie eine gute Sache, wenn zu viele Personen gleichzeitig Ihre Website besuchen möchten, aber dies wird zu einem echten Problem, wenn die Ladezeiten extrem langsam werden 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 an einen Punkt gelangen, an dem Sie mehr als ein oder zwei kleine Webserver benötigen.
- Einfachheit der Einrichtung: Das schnelle Einrichten eines Projekts ist entscheidend für die Iteration Ihres Projekts. Ein unkomplizierter und wiederholbarer Installationsprozess ist wichtig für den ersten Webserver, den Sie einrichten, und für die mehreren Webserver danach, wenn Sie skalieren.
- Dokumentation: Webserver sind komplex. Die gängigsten Einrichtungen 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 dieser Zeitpunkt gekommen 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 ihrem Projekt anvertrauen. Dies umfasst sowohl Pläne für langfristige Unterstützung ihrer Software als auch sofortige kurzfristige Unterstützung, die sie in Form von Fehlerbehebungen und Patches bereitstellen.
- Gemeinschaftsunterstützung: Ein Kernteam von Entwicklern wird den Großteil der schweren Arbeit erledigen, aber eine blühende Gemeinschaft trägt dazu bei, Lücken zu füllen. Bei Open-Source-Projekten kann dies Beiträge zum eigentlichen Code-Bestand bedeuten, aber eine starke Gemeinschaft 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 Versuchen, dieselben Probleme zu lösen. 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 kam zuerst und wurde zu einer Zeit entwickelt, als es üblich war, dass mehrere Websites mit ihren eigenen individuellen Konfigurationsdateien alle auf einem einzigen Webserver existierten. Nginx kam nach Apache, zu einer Zeit, als sich die Bedürfnisse weg von der Bereitstellung mehrerer Websites von einem Server hin zu der Bereitstellung einer Website von einem Server auf äußerst effiziente Weise unter Last verschoben haben.
Obwohl Webserver die gleichen Ziele und Probleme teilen, wird die Interpretation und Implementierung 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 Bewertungsmethode, auch wenn sich das Angebot an Webservern ändert, durch Ihre eigenen Anforderungen verwurzelt.
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 kontroverse strukturelle Frage, die Webserver-Produkte trennt.
Die Hauptunterscheidung besteht zwischen Zentralisierung und Dezentralisierung. Dezentrale Konfigurationsdateien ermöglichen eine granulare Kontrolle 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 die Übereinstimmung von URI-Mustern, bei der URLs mit Dateinamen und anderen eindeutigen Identifikatoren abgeglichen werden, anstatt sich auf die Übereinstimmung mit der Verzeichnisstruktur eines Webservers zu verlassen.
Die .htaccess
-Dateien von Apache erleichtern eine dezentrale Konfiguration als Funktion, und jede Designentscheidung ergibt sich aus diesem Fokus auf das Dateisystem mit granularer Kontrolle. Nginx hat nicht den gleichen Fokus auf das Dateisystem und konzentriert sich auf die Übereinstimmung von URI-Mustern und eine zentralisierte Konfiguration.
Umgang mit Parallelität
Die physischen und virtuellen Server, auf denen Sie Webserver ausführen, verfügen über begrenzte Ressourcen wie RAM und CPU-Verarbeitung. Wie Ihr Webserver grundsätzlich seine Anfragen verwaltet, hat den größten Einfluss auf die effiziente Nutzung Ihrer Ressourcen. Eine einzelne Anfrage kann einen ganzen Prozess pro Anfrage 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 bei Last zu einem Problem werden kann. Das ereignisgesteuerte System von Nginx verwendet weniger Ressourcen und kann bei Last performanter sein.
Statische Inhalte bereitstellen
Neben Webseiten erhalten Webserver Anfragen für andere Ressourcen wie Bilder, Videos, CSS-Dateien und JavaScript-Dateien. Da diese Elemente unabhängig davon, wer sie anfordert, immer gleich sind, werden sie als statischer Inhalt bezeichnet. Oft ist eine Webseite selbst nur eine HTML-Datei, die nicht an die Person angepasst ist, die sie anfordert, und wird ebenfalls als statischer Inhalt behandelt. Webserver können diesen statischen Inhalt auch für bessere Ladezeiten komprimieren.
Nginx glänzt beim Bereitstellen von statischem Inhalt aufgrund seiner ereignisgesteuerten Anfragenbearbeitung. Apache kann ebenfalls statischen Inhalt bereitstellen, aber in den meisten Setups nicht mit der gleichen Geschwindigkeit und Effizienz bei Last im Vergleich zu Nginx.
Bereitstellung dynamischer Inhalte
Wenn Inhalte geändert, verarbeitet und je nach Anfragequelle angepasst werden, spricht man von dynamischen Inhalten. Zum Beispiel füllt eine Website nach dem Einloggen oft dynamisch Ihren Benutzernamen in der oberen Navigationsleiste aus. Dynamische Inhalte erhöhen die Komplexität, da der Webserver viele Anfragen zum Zeitpunkt des Empfangs individuell bearbeiten muss. Inhalte, die pro Anfrage angepasst werden, können nicht für jeden bereitgestellt und nicht universell zwischengespeichert werden.
Die interne Verarbeitung dynamischer Inhalte entfernt eine zusätzliche Abstraktionsebene, die normalerweise eine Weiterleitung 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.
Umgekehrte Proxy-Fähigkeit
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 basierend auf der Last oder der Regelkonfiguration zu bestimmen, welchen Webserver die Anfrage gesendet werden soll. Diese Vermittlerrolle ermöglicht es ihm sogar, in einigen Setups mit Apache zu kombinieren, indem er als Reverse-Proxy vor einem traditionellen Apache-Webserver sitzt.
Unterstützungsumgebung
Sowohl Nginx als auch Apache werden von ihren jeweiligen Entwicklungsteams und der Community stark unterstützt. Als die beliebtesten Open-Source-Webserver gibt es reichlich Lernressourcen. Apache wird von der Apache Software Foundation, einer gemeinnützigen Organisation, unterstützt und ist immer kostenlos zu verwenden. Der Kern von Nginx ist Open Source, aber wünschenswerte Funktionen sind in ihrem Nginx Plus-Produktangebot mit Funktionen wie Upstream-Gesundheitschecks, Sitzungspersistenz und erweitertem Monitoring gesperrt.
Alternativen zum traditionellen Webserver
Wenn Sie einen Server wünschen, der jederzeit bereit ist, auf eine eingehende HTTP-Anfrage zu reagieren, dann erfüllt ein Webserver diese Aufgabe am besten. Je weiter Sie sich vom Fokus auf die Bedienung von HTTP-Anfragen entfernen, desto weniger ideal wird ein Webserver als Lösung sein. Dies gilt insbesondere für die zusätzlichen Funktionen, die Webserver bereitstellen. Beispielsweise können Funktionen wie Caching effizienter auf Ebene des Reverse-Proxys oder des CDN verwaltet werden, abhängig von der Konfiguration.
Zusätzlich sind im Zuge der Verlagerung der Prioritäten von Entwicklern bei der Zuweisung von Entwicklungressourcen für die Verwaltung von Webservern Lösungen wie serverless, headless CMS und Jamstack entstanden. Diese Lösungen erfordern keinen selbst gehosteten 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. Weitere Informationen finden Sie in diesem Artikel über Jamstack mit headless CMS oder die Implementierung eines Full-Stack-Jamstack mit DigitalOceans App-Plattform.
Abschluss
In diesem Artikel haben Sie eine grundlegende Einführung in das Thema Webserver erhalten, wie sie verwendet werden und mit welchen Problemen sie versuchen, sich auseinanderzusetzen. Ausgestattet mit diesem Wissen haben Sie sich mit der aktuellen Landschaft der Webserverlösungen befasst 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-Anleitungen zur Einrichtung Ihres ersten Apache-Servers. Diese Lösung zeichnet sich durch eine dezentrale Konfiguration für eine granulare Kontrolle und die interne Verarbeitung dynamischer Webseiten mit Hooks in beliebte Programmiersprachen wie PHP aus.
- So installieren Sie Nginx: Schritt-für-Schritt-Anleitungen zur Einrichtung Ihres ersten Nginx-Servers. Diese Lösung zeichnet sich durch eine zentrale Konfiguration, das Bereitstellen von statischen Assets, das Agieren als Reverse-Proxy und die Bewältigung von stark frequentiertem Datenverkehr aus.
- Apache vs Nginx: Praktische Überlegungen: Ein tiefergehender Blick auf die beiden wichtigsten Akteure in der Landschaft der Webserverlösungen.
DigitalOcean Produkte:
- DigitalOcean Droplets: Virtuelle private Server, um Webserver zu testen und bereitzustellen.
- DigitalOcean Functions: 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