Einführung
Die Hauptrolle eines Web-Servers besteht darin, Webseiten für eine Website bereitzustellen. Eine Webseite kann aus einer einzigen HTML-Datei oder einer komplexen Zusammenstellung von Ressourcen zusammengestellt werden. Wenn Sie Ihre Webanwendung im Internet hosten möchten, benötigen Sie in vielen Fällen einen Web-Server.
Ein der häufigsten Anwendungsfälle für Web-Server ist die Bereitstellung von Dateien, die für das Rendern 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 geht durch mehrere Schichten, von denen eine oder mehrere ein Web-Server sind. Dieser Web-Server generiert eine Antwort auf Ihre Anfrage, die in diesem Fall die Website von DigitalOcean ist, speziell die Startseite. Idealerweise geschieht dies schnell und mit 24/7-Verfügbarkeit.
Während jeder Besucher der Startseite von DigitalOcean diese als einzelne Webseite erlebt, bestehen in der Realität die meisten modernen Webseiten heute aus einer Kombination vieler Ressourcen. Web-Server agieren als Vermittler zwischen dem Backend und dem Frontend, indem sie Ressourcen wie HTML- und CSS-Dateien bis hin zu JSON-Daten bereitstellen, die alle dynamisch generiert oder statisch bereitgestellt werden. Wenn Sie vorhaben, mit Websites oder Online-Apps in irgendeiner Weise zu arbeiten, ist es äußerst nützlich, sich mit den Grundlagen dessen vertraut zu machen, was ein Web-Server ist und wie er funktioniert.
Der Begriff „Web-Server“ kann sich sowohl auf die Software selbst als auch auf die Hardware beziehen, auf der sie existiert. In diesem Artikel bezieht sich der Terminus spezifisch auf die Web-Server-Software. Weitere Details zu dieser Differenz finden Sie in unserer Einführung in Cloud-Server.
Gängige Anwendungsfälle
Ein Web-Server bearbeitet Anfragen im Internet über das HTTP- und HTTPS-Protokoll und wird auch als HTTP-Server bezeichnet. Ein Web-Server unterscheidet sich von anderen Server-Typen dadurch, dass er sich auf die Verarbeitung dieser HTTP- und HTTPS-Anfragen spezialisiert hat, wodurch er sich von Anwendungsservern (z. B. Gunicorn) und Servern für andere Protokolle (d. h. WSGI) unterscheidet. Diese anderen Server arbeiten als Vermittler für Backend-Programmiersprachen über externe Bibliotheken, was eine andere Stufe der Abstraktion als Web-Server ist.
Hier sind einige gängige Aufgaben, die von Web-Servern bearbeitet werden:
- Stellt HTML-, CSS- und JavaScript-Dateien bereit.
- Stellt Bilder und Videos bereit.
- Verarbeitet HTTP-Fehlermeldungen.
- Bearbeitet Benutzeranfragen oft gleichzeitig.
- Leitet URL-Abstimmung und -Umschreibung.
- Verarbeitet und bereitstellt dynamische Inhalte.
- Komprimiert Inhalte für optimierte Datenverwendung und Geschwindigkeit.
- Macht Browser-Caching für Ihre statischen Inhalte möglich.
In der Praxis sind hier einige persönliche Projekte, die den Einsatz eines Web-Servers beinhalten:
- Vous möchtet eine Website erstellen.
- Vous möchtet eine App entwickeln, die eine Internetverbindung hat.
Diese Liste ist keineswegs vollständig, und ein Web-Server ist nicht streng begrenzt in den Datentypen, die er einem Endbenutzer bereitstellen kann. Zum Beispiel antwortet ein Web-Server, der Web-API-Anfragen bedient, oft mit Daten in einem Format wie JSON.
Ziele eines Web-Servers
Web-Server entsprechen den Erwartungen einer Nutzergruppe an Geschwindigkeit, Verfügbarkeit, Zuverlässigkeit und mehr. Sie dienen dem gemeinsamen Zweck, Inhalte im Internet bereitzustellen, und um als tragfähige Web-Server-Lösung zu gelten, müssen die folgenden Aspekte berücksichtigt werden:
- Uptime: Dies bezieht sich auf die Zeit, in der ein Web-Server online und betriebsbereit ist. Websites müssen rund um die Uhr erreichbar sein, um Benutzern zu dienen, daher ist ein hoher Uptime das Ziel. Dies bedeutet auch Stabilität und Vorhersagbarkeit. Wenn ein Benutzer eine URL eingibt oder auf einen Link zu Ihrer Website klickt, sollte die erwartete Seite jedes Mal und zu jeder Zeit laden. Die einzigen Ausnahmen sollten geplante Abschaltzeiten für Updates oder Wartungsarbeiten sein. Ein Web-Server, der fehlerhaft ist oder zufällig abstürzt, beeinträchtigt das Benutzererlebnis negativ.
- Geschwindigkeit: Ihre Webseiten sollten so schnell wie möglich geladen werden. Nutzer wollen ihre Anfrage sofort befriedigt bekommen, andernfalls besteht die Gefahr, dass Sie sie verlieren. Auf einer langsam laufenden Webseite, auch wenn der Nutzer die erste Ladezeit ausdrücklich toleriert, nimmt jede anschließende lange Ladezeit exponentiell ab, was die Bereitschaft des Nutzers abnimmt, auf der Webseite zu bleiben oder erneut zu besuchen.
- Konkurrenzfähigkeit: Dies bezieht sich auf die Verarbeitung von mehreren Anfragen gleichzeitig. Zu viele Menschen, die gleichzeitig Ihre Webseite aufsuchen, scheint zunächst einmal eine gute Sache zu sein, aber dies wird eine echte Problematik, wenn die Ladezeiten langsam werden und Ihr gesamter Server abstürzt. Ihr physischer oder virtueller Server hat nur eine bestimmte Anzahl an Ressourcen, wie z.B. RAM und CPU-Rechenleistung, und Web-Server müssen diese Ressourcen effizient nutzen.
- Skalierbarkeit: Skalierbarkeit bezieht sich entweder darauf, Ihre bestehenden Server zu verstärken, indem Sie vertikal skalieren, oder indem Sie mehr Server zu Ihrer Konfiguration hinzufügen, indem Sie horizontal skalieren. Wenn Sie Ihre Zielgruppe weiterentwickeln, könnten Sie an einer Stelle angelangt sein, wo Sie mehr als eine oder zwei kleine Web-Server benötigen.
- Einrichtungs-Einfachheit: Die schnelle Erstellung eines Projekts ist ausschlaggebend für die Iteration Ihres Projekts. Ein einfacher und wiederholbarer Installationsprozess ist wichtig für den ersten Web-Server, den Sie einrichten, sowie für die spätere Erweiterung, wenn Sie skalieren.
- Dokumentation: Web-Server sind komplex. Die meisten häufigen Setups werden Ihnen schnell zu Fuß bringen, aber Ihre Bedürfnisse werden mit der Zeit wachsen. Oftmals müssen Sie Features nutzen, die nicht so häufig verwendet werden. Wenn dies der Fall ist, ist gute Dokumentation unerlässlich, um maßgeschneiderte Lösungen für Ihre Bedürfnisse zu schaffen.
- Entwicklerunterstützung: Wenn sich die Kernentwickler nicht für ihr eigenes Projekt engagieren, sollten Sie Ihr Projekt nicht in das ihre einbringen. Dies umfasst sowohl langfristige Pläne für die Unterstützung ihrer Software als auch sofortige kurzfristige Unterstützung, die sie in Form von Bugfixes und Patches bereitstellen.
- Gemeinschaftsunterstützung: Ein Kernentwicklerteam übernimmt die meiste schwere Arbeit, aber eine blühende Gemeinschaft trägt dazu bei, die Lücken zu füllen. Bei Open-Source-Projekten kann dies bedeuten, dass zur tatsächlichen Codebasis beigetragen wird, aber eine starke Gemeinschaft wird auch Ihre Fragen beantworten und Ihnen bei Ihren spezifischen Problemen helfen.
Während Web-Server verschiedene Lösungen anbieten können, stammen die von ihnen angebotenen Lösungen aus Versuchen, diese gleichen Probleme zu bewältigen. Diese Probleme selbst entwickeln sich im Laufe der Zeit gemeinsam mit den Bedürfnissen und Erwartungen des Endnutzers, was dies zu einer lebendigen und ständig sich weiterentwickelnden Liste macht.
Auswahl einer Web-Server-Lösung
Die derzeit beliebtesten Open-Source-Web-Server sind Apache und Nginx.
Apache kam zuerst und wurde zu einer Zeit entwickelt, als es noch häufig war, dass mehrere Websites mit eigenen individuellen Konfigurationsdateien auf einem einzigen Web-Server existierten. Nginx kam nach Apache, zu einer Zeit, als sich die Bedürfnisse weg von der Bereitstellung mehrerer Websites von einem Server hin zur äußerst effizienten Bereitstellung einer Website von einem Server unter Last verschoben.
Während Web-Server die gleichen Ziele und Probleme teilen, wird die Interpretation und Implementierung jeder Lösung unterschiedlich sein. Die genauen Antworten auf diese Probleme formen die Identität jeder einzelnen Web-Server-Lösung. Nginx und Apache werden hier hervorgehoben, aufgrund ihrer Ubiquität, aber jede Web-Server-Lösung wird einseitig sein. Bei der Auswahl eines Web-Servers ist es wichtig, an Ihre eigenen Bedürfnisse für Ihr spezifisches Projekt zu denken. Auf diese Weise bleibt Ihre Methode der Bewertung auch dann grundlegend, wenn sich das Angebot an Web-Servern ändert.
Hier sind einige Schlüsselunterschiede, wie Web-Server versuchen, die Ziele eines Web-Servers zu erreichen:
Struktur der Konfigurationsdateien
Web-Server speichern ihre Einstellungen in Konfigurationsdateien. Sie können Ihre Web-Server durch Bearbeiten dieser Dateien anpassen. Die Speicherung und Organisation der Konfigurationsdateien ist eine einseitige, strukturelle Frage, die Web-Server-Produkte teilt.
Der Hauptunterschied liegt zwischen Zentralisierung und Deszentralisierung. Deszentralisierte Konfigurationsdateien ermöglichen eine feine Kontrolle auf Dateisystemebene, was 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, das ist die Übereinstimmung von URLs mit Dateinamen und anderen eindeutigen Identifikatoren, anstatt auf die Übereinstimmung mit der Verzeichnisstruktur eines Web-Servers zu setzen.
Apaches .htaccess
-Dateien ermöglichen eine deszentralisierte Konfiguration als Funktion und jede Designentscheidung fließt aus dieser Fokussierung auf das Dateisystem mit einer feinen Kontrolle. Nginx hat nicht die gleiche Fokussierung auf das Dateisystem und konzentriert sich auf URI-Muster und eine zentralisierte Konfiguration.
Verarbeitung von Konkurrenz
Die physischen und virtuellen Server, auf denen Sie Web-Server betreiben, haben begrenzte Ressourcen wie RAM und CPU-Verarbeitung. Wie Ihr Web-Server grundlegend seine Anfragen verwalten wird den größten Einfluss auf die effiziente Nutzung Ihrer Ressourcen haben. Eine einzelne Anfrage kann einen gesamten Prozess pro Anfrage erzeugen oder auf einer ereignisbasierten Grundlage behandelt werden. Die Fähigkeit Ihres Web-Servers, mehrere gleichzeitige Anfragen effizient zu verarbeiten, hängt von grundlegenden Designentscheidungen ab.
Apache bearbeitet Anfragen, indem es Prozesse erstellt, was unter Last zu einem Problem werden kann, da es Ressourcen aufnimmt. Das ereignisgesteuerte System von Nginx verwendet weniger Ressourcen und kann unter Last leistungsfähiger sein.
Static Content Bereitstellen
Neben Webseiten erhalten Webserver Anfragen für andere Ressourcen wie Bilder, Videos, CSS-Dateien und JavaScript-Dateien. Da diese Elemente immer gleich bleiben, unabhängig davon, wer sie anfordert, wird dieser Inhalt als statisch bezeichnet. Oftmals ist eine Webseite einfach eine HTML-Datei, die nicht an die Person angepasst wird, die sie anfordert, und wird ebenfalls als statischer Inhalt behandelt. Webserver können diesen statischen Inhalt auch zur Verbesserung der Ladezeiten komprimieren.
Nginx excelliert bei der Bereitstellung von statischem Content aufgrund seiner ereignisgesteuerten Anfragenverarbeitung. Apache kann ebenfalls statischen Content bereitstellen, aber in den meisten Konfigurationen nicht mit der gleichen Geschwindigkeit und Effizienz unter Last wie Nginx.
Dynamic Content Bereitstellen
Wenn Inhalt je nach Anforderer geändert, verarbeitet und individualisiert wird, bezeichnet man den Inhalt als dynamisch. Zum Beispiel wird nach dem Anmelden auf einer Website oft der Benutzername dynamisch in der oberen Navigationsleiste angezeigt. Dynamischer Inhalt bringt zusätzliche Komplexität mit sich, da der Webserver gezwungen ist, viele Anfragen zum Zeitpunkt der Empfangnahme einzigartig zu behandeln. Angepasster Inhalt pro Anfrage kann nicht an alle gesendet werden und kann nicht universell gespeichert werden.
Die interne Verarbeitung dynamischer Inhalte entfernt eine zusätzliche Abstraktionsebene, die normalerweise die Übergabe der Anfrage an eine externe Bibliothek erfordern würde. Apache implementiert die Verarbeitung dynamischer Inhalte nativ, mit beliebten Solution Stacks 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 dienen.
Reverse Proxy Kapazität
Ein Reverse-Proxy steht vor einem traditionellen Webserver und wird zu einem Zwischenproxyserver, der HTTP-Request-Verkehr zu Webservern hinter ihm leitet. Ein Reverse-Proxy wird zur Gateway, das den Verkehr zwischen Webservern und dem gesamten Internet lenkt und oft die Schicht ist, die direkt mit einer Firewall Schnittstelle. Während die meisten Webserver über Reverse-Proxy-Fähigkeiten verfügen, wurde Nginx von Grund auf entwickelt und optimiert, um einen robusten Reverse-Proxy-Server zu sein.
Die Bedeutung von Nginx in der realen Welt Nutzung hängt stark von seinen Reverse-Proxy-Funktionen und Effizienz ab. Viele Server-Setups platzieren mehrere traditionelle Webserver hinter einem Nginx Reverse-Proxy und verwenden Nginx, um zu bestimmen, welchem Webserver der Request basierend auf der Last oder Regelkonfiguration gesendet werden soll. Diese Zwischenrolle ermöglicht es ihm sogar, in einigen Setups mit Apache zusammenzupassen, der als Reverse-Proxy vor einem traditionellen Apache-Webserver steht.
Support-Ecosystem
Nginx und Apache erhalten beide starke Unterstützung von ihren jeweiligen Entwicklerteams und Gemeinschaften. Als die beliebtesten Open-Source-Webserver sind Lernressourcen reichlich. Apache wird vom Apache, einer gemeinnützigen Organisation, unterstützt und ist immer kostenlos nutzbar. Der Kern von Nginx ist Open Source, aber erwünschte Funktionen sind hinter ihrem Nginx-Plus-Produktangebot verschlossen, das Funktionen wie Upstream-Health-Checks, Sitzungsverdauerung und erweiterte Überwachung bietet.
Alternativen zum traditionellen Webserver
Wenn Sie einen Server benötigen, der jederzeit bereit ist, auf eingehende HTTP-Anfragen zu reagieren, erfüllt dies ein Webserver am besten. Je weiter Sie sich von der Fokussierung auf das Servern von HTTP-Anfragen entfernen, desto weniger ideal wird ein Webserver als Lösung. Dies gilt insbesondere für die zusätzlichen Funktionen, die Webserver bieten. Zum Beispiel können Funktionen wie Caching je nach Setup effizienter auf der Ebene des Reverse Proxies oder CDN gehandhabt werden.
Außerdem haben sich Entwickler im Laufe der Zeit daran gewöhnt, ihre Prioritäten zu verlagern, indem sie Entwicklungsmittel für die Verwaltung von Webservern widmen, wodurch Lösungen wie Serverlos, headless CMS und Jamstack entstanden sind. Diese Lösungen erfordern keinen selbstgehosteten Webserver, sondern abstrahieren die Webserverebene auf externe Dienste aus. Für Entwickler, die keine granulare oder erweiterte Kontrolle der Webserverebene benötigen, kann die Entwicklung Zeit auf andere Bereiche fokussiert werden. Weitere Informationen finden Sie in diesem Artikel über Jamstack mit headless CMS oder Implementierung von Full-Stack Jamstack mit DigitalOceans App Platform.
Schlussfolgerung
In diesem Artikel hast du einen grundlegenden Überblick darüber bekommen, was Web-Server sind, wie sie verwendet werden und welche Probleme sie lösen sollen. Ausgerüstet mit diesem Wissen, bist du in die aktuelle Landschaft der Web-Server-Lösungen eingetaucht und hast dein Wissen angewendet, um die Lösung zu finden, die speziell zu deinen Bedürfnissen passt. Um mehr über die Einrichtung und Verwendung eines Web-Servers zu erfahren, schaue dir den Rest unserer Cloud-Curriculum-Reihe über Web-Server an.
Zusätzliche Ressourcen
Tutoreniale:
- So installierst du Apache: Schritt-für-Schritt-Anweisungen zur Einrichtung deines ersten Apache-Servers. Diese Lösung excelliert mit einer dezentralen Konfiguration für eine granulare Kontrolle und der internen Verarbeitung dynamischer Webseiten mit Anbindungen zu beliebten Programmiersprachen wie PHP.
- So installierst du Nginx: Schritt-für-Schritt-Anweisungen zur Einrichtung deines ersten Nginx-Servers. Diese Lösung excelliert mit einer zentralen Konfiguration, der Bereitstellung statischer Assets, der Funktion als umgekehrter Proxy und der Handhabung von hoch并发-Traffic.
- Apache vs Nginx: Praktische Überlegungen: Ein tieferer Einblick in die beiden größten Akteure in der Landschaft der Web-Server-Lösungen.
DigitalOcean-Produkte:
- DigitalOcean Droplets: Virtuelle private Server, um Web-Server zu testen und zu deployen.
- DigitalOcean Functions: Eine serverlose Lösung, die als Alternative zu virtuellen privaten Servern dienen kann. Überspringen Sie die Wartung von Servern und konzentrieren Sie sich auf Ihren Anwendungscode.
Source:
https://www.digitalocean.com/community/conceptual_articles/web-servers-introduction