# 3.1 Einführung in die Webserver-Grundlagen

Viele Webserver laufen im produktiven Betrieb auf Linux-Systemen, sodass auch in diesem Kapitel Beispiele aus der Konfiguration auf einem Debian-Linux-System gezeigt werden. Aber alle Webserver lassen sich (zu Testzwecken) auch auf Mac oder Windows gut installieren. Dazu wird das Paket XAMPP empfohlen. Die Konfigurationsparameter (beim Apache Direktiven genannt) sind gleich. Unterschiedlich ist "nur" der Aufbau der Konfigurationsdateien.

In der beruflichen Praxis werden Sie immer wieder andere Systeme vorfinden. Die Konfigurationsdateien werden immer anders heißen und immer anders aufgebaut sein. Aber wenn Sie die Inhalte der Konfigurationsdateien einmal verstanden haben – und Konfigurationen selbst ausprobiert haben –, dann werden Sie sich schnell zurechtfinden.

Hinweis

Ein Server-Programm ist typischerweise ein Programm ohne visuelle Oberfläche. Das Programm kann nach dem Programmstart somit nicht gesehen werden, wenn man keine Server-Monitoring-Tools verwendet. Bei einem Server-Programm erfolgen die Befehlsanweisungen über das Netzwerk. Ein Client sendet einen Auftrag an den Server und erhält nach Abarbeitung des Programms eine entsprechende Rückmeldung.

## Unterschiedliche Webserver

Es gibt unterschiedliche Webserver für ganz unterschiedliche Zwecke. Beispielsweise gibt es in vielen Druckern einen Webserver, um den Druckstatus über einen Browser (oder ein Desktop-Programm) abrufen zu können. Oder auch Heizungsthermostate, die über einen Webserver gesteuert werden. An diese Webserver werden natürlich ganz andere Anforderungen gestellt, als an Hochleistungs-Webserver für bekannte Internet-Auftritte.

In diesem Kapitel behandeln wir drei sehr bekannte Webserver für "normale Internetauftritte":

- Apache Webserver: Das "Urgestein". Läuft sehr stabil und kann für alle möglichen Anwendungs- und Spezialfälle konfiguriert werden, ist also sehr flexibel einsetzbar. Der Apache Webserver ist "workerprozessbasiert". Somit bekommt jeder Client-Request einen eigenen Workerprozess zugewiesen - und damit die gesamte Mächtigkeit und Schwerfälligkeit des Apache. Es wird für einen Client-Request, bei dem ein Bild angefordert wird, beispielsweise auch das PHP-Modul des Webservers, so wie alle anderen Module im Workerprozess, geladen. Je nach Hardwareausstattung des Servers und nach Anzahl der (gleichzeitigen) Client-Requests, kann dies zu einem Performance-Problem führen.

- nginx Webserver: Ein schlanker, eventbasierter Webserver mit viel geringeren Konfigurationsmöglichkeiten und ohne die schwergewichtigen Workerprozesse. Somit ist der nginx sehr performant. Oftmals werden nginx und Apache-Webserver auch gemeinsam eingesetzt. Dabei übernimmt der nginx auf einem Server alle statischen Ressourcen (Bilder, CSS-Dateien etc.) und leitet nur die "Spezialanfragen" an einen anderen Server weiter (als Load-Balancer), auf dem dann ein Apache läuft. So kann man in einer "Server-Farm" die hohe Performance des nginx und die gute Flexibilität des Apache nutzen.

- node.js Webserver: Ein neuer Webserver, der in JavaScript geschrieben ist und ebenfalls eventbasiert arbeitet. Interessant ist der node.js, da er nicht nur ein Web-, sondern auch eine Art "Datenstrom"-Server ist. So kann er auch als TCP-Server arbeiten, oder für den asynchronen Netzwerkzugriff eingesetzt werden.

## Prinzipielle Funktionsweise

Jeder Server hat eine eindeutige IP-Adresse bzw. eine Domain oder URI, die auf diese IP-Adresse zeigt. Über die IP-Adresse kommt die Anfrage bis zum Server. Auf dem Server können unterschiedliche Serverprozesse laufen, die jeweils ein ganz bestimmtes Protokoll erwarten und als "Hintergrundprozess" (engl. daemon) auf eine Anfrage warten. Diese Anfragen "lauschen" auf einem Port. Beim Protokoll HTTP ist dies, standardmäßig voreingestellt, der Port 80.

Ablauf einer Client-Anfrage

- Dem Webserver wird eine feste IP-Nummer zugeordnet, sodass der Client den gewünschten Server ansprechen kann.
- Auf dem Server wiederum werden die verschiedenen Anfragen über Portnummern an das entsprechende Programm weitergeleitet.
- Der Standard-Port für den Webserver ist bei HTTP Port 80 und bei HTTPS Poort 443.
- Jede Anfrage auf Port 80 bzw, 443 wird an das Server-Programm weitergeleitet und dort von einem Prozess bearbeitet.

## Wenn Sie mit XAMPP auf Ihrem Windows-System arbeiten

Um zu erfahren, wie zugänglich Ihr Rechner ist, sollten Sie zuerst Ihre IP-Nummer ermitteln. Dies erfolgt auf Windows-Systemen, indem Sie unter "Start" das Terminalfenster mit "cmd.exe" aufrufen. In die erscheinende Konsole geben Sie dann den Befehl `ipconfig` ein.

Eine IP-Adresse im nachfolgenden Bereich bedeutet, dass Ihr Rechner nicht direkt über das Internet erreichbar ist und Sie einen (Einwahl-)Router zwischengeschaltet haben.

- 10.0.0.0 - 10.255.255.255
- 172.16.0.0 - 172.31.255.255
- 192.168.0.0 - 192.168.255.255

Eine nicht direkt erreichbare IP-Adresse erhöht die Sicherheit, da Ihr Rechner nicht direkt erreicht werden kann. Hierzu muss ein potentieller Angreifer sich erst mit Ihrem Einwahl-(Router) verbinden.