Advertisement
  1. Code
  2. Web Development

Eine Einführung in Apache

by
Read Time:12 minsLanguages:

German (Deutsch) translation by Tatsiana Bochkareva (you can also view the original English article)

Wenn Ihnen Apache immer wie eine Black Box vorgekommen ist, ist es Zeit zu erfahren, was sich hinter den Kulissen abspielt!

Apache ist der beliebteste verfügbare Webserver.

Die Aufgabe eines Webservers besteht im Wesentlichen darin, Anforderungen von Clients anzunehmen und Antworten auf diese Anforderungen zu senden. Ein Webserver hat eine URL, er übersetzt sie in einen Dateinamen (für statische Anforderungen) und sendet diese Datei über das Internet von der lokalen Festplatte zurück oder übersetzt sie in einen Programmnamen (für dynamische Anforderungen), führt sie aus und führt sie dann aus sendet die Ausgabe dieses Programms über das Internet an die anfragende Partei zurück. Wenn der Webserver die Anforderung aus irgendeinem Grund nicht verarbeiten und abschließen konnte, wird er eine Fehlermeldung zurückgegeben. Das Wort Webserver kann sich auf die Maschine (computer/hardware) selbst oder auf die Software beziehen, die Anforderungen empfängt und Antworten sendet.

Apache ist der beliebteste verfügbare Webserver (nach dem Microsoft IIS). Die Gründe für seine Popularität, um nur einige zu nennen, sind:

  1. Es kann kostenlos heruntergeladen und installiert werden.
  2. Es ist Open Source: Der Quellcode ist für jeden und jeden sichtbar, was es grundsätzlich jedem (der sich der Herausforderung stellen kann) ermöglicht, den Code anzupassen, zu optimieren und Fehler und Sicherheitslücken zu beheben. Leute können neue Funktionen hinzufügen und neue Module schreiben.
  3. Es ist für alle Anforderungen geeignet: Apache kann für kleine Websites mit einer oder zwei Seiten oder große Websites mit Hunderten und Tausenden von Seiten verwendet werden, die jeden Monat Millionen von regelmäßigen Besuchern bedienen. Es kann sowohl statische als auch dynamische Inhalte bereitstellen.

Was ist Apache?

Funktionen, die Sie nicht benötigen oder möchten, können einfach entfernt werden.

Der Apache-HTTP-Server ist eine Software (oder ein Programm), die bzw. das im Hintergrund unter einem geeigneten Betriebssystem ausgeführt wird, das Multitasking unterstützt und Dienste für andere Anwendungen bereitstellt, die eine Verbindung zu ihm herstellen, z. B. Client-Webbrowser. Es wurde zuerst für Linux/Unix-Betriebssysteme entwickelt, später jedoch für andere Systeme wie Windows und Mac. Die unter UNIX ausgeführte Apache-Binärdatei heißt HTTPd (kurz für HTTP-Daemon) und unter win32 heißt Apache.exe.

Die Installation von Apache unter Linux erfordert einige Programmierkenntnisse (obwohl dies nicht allzu schwierig ist). Die Installation auf einer Windows-Plattform ist unkompliziert, da Sie sie über eine grafische Benutzeroberfläche ausführen können.

Der ursprüngliche Kern von Apache ist ziemlich einfach und enthält eine begrenzte Anzahl von Funktionen. Seine Leistung beruht vielmehr auf zusätzlichen Funktionen, die durch viele Module eingeführt wurden, die von Programmierern geschrieben wurden und installiert werden können, um die Funktionen des Servers zu erweitern. Um ein neues Modul hinzuzufügen, müssen Sie es nur installieren und den Apache-Server neu starten. Funktionen, die Sie nicht benötigen oder möchten, können leicht entfernt werden. Dies wird als bewährte Methode angesehen, da sie den Server klein und leicht hält, schneller startet, weniger Systemressourcen und Speicher verbraucht und den Server weniger anfällig für Sicherheitslücken macht. Der Apache-Server unterstützt auch Module von Drittanbietern, von denen einige als permanente Funktionen zu Apache 2 hinzugefügt wurden. Der Apache-Server lässt sich sehr einfach in andere Open-Source-Anwendungen wie PHP und MySQL integrieren und ist damit noch leistungsfähiger als er bereits ist.

Ein Webserver in seiner einfachsten Form ist ein Computer mit spezieller Software und einer Internetverbindung, über die er eine Verbindung zu anderen Geräten herstellen kann.

Jedes mit einem Netzwerk verbundene Gerät verfügt über eine IP-Adresse, über die andere eine Verbindung herstellen und mit ihm kommunizieren. Diese IP-Adresse ähnelt einer normalen Adresse, die Sie im wirklichen Leben benötigen, um einen Ihrer Kontakte anzurufen oder zu besuchen. Wenn sie keine Adresse hätten, würden Sie nicht wissen, wie Sie sie anrufen oder erreichen sollen. IP-Adressen dienen genau dem gleichen Zweck. Wenn ein Gerät nicht über eines verfügt, wissen die anderen Computer im selben Netzwerk nicht, wie sie es erreichen können.

Der Apache-Server bietet eine Reihe von Diensten, die Clients nutzen. Diese Dienste werden unter Verwendung verschiedener Protokolle über verschiedene Ports angeboten und umfassen: Hypertext Transfer Protocol (HTTP), typischerweise über Port 80, Simple Mail Transfer Protocol (SMTP), typischerweise über Port 25, Domain Name Service (DNS) zum Zuordnen von Domainnamen ihre entsprechenden IP-Adressen, im Allgemeinen über Port 53, und das Dateiübertragungsprotokoll (FTP) zum Hoch- und Herunterladen von Dateien, normalerweise über Port 21.


Wie Apache funktioniert

Die Hauptaufgabe von Apache liegt in der Kommunikation über Netzwerke und es wird das TCP/IP-Protokoll (Transmission Control Protocol/Internet Protocol, mit dem Geräte mit IP-Adressen innerhalb desselben Netzwerks miteinander kommuniieren können) verwendet.

Das TCP/IP-Protokoll besteht aus einer Reihe von Regeln, die definieren, wie Clients Anforderungen stellen und wie Server reagieren, und bestimmen, wie Daten gesendet, geliefert, empfangen und bestätigt werden.

Der Apache-Server ist so eingerichtet, dass er Konfigurationsdateien durchläuft, in denen Anweisungen hinzugefügt werden, um sein Verhalten zu steuern. Im Ruhezustand lauscht Apache den IP-Adressen, die in seiner Konfigurationsdatei (HTTPd.conf) angegeben sind. Bei jedem Empfang einer Anforderung werden die Header analysiert, die in der Konfigurationsdatei angegebenen Regeln angewendet und Maßnahmen ergriffen.

Ein Server kann jedoch viele Websites hosten, nicht nur eine. Für die Außenwelt scheinen sie jedoch voneinander getrennt zu sein. Um dies zu erreichen, muss jeder dieser Websites ein anderer Name zugewiesen werden, auch wenn alle diese Websites letztendlich demselben Computer zugeordnet sind. Dies wird mithilfe von sogenannten virtuellen Hosts erreicht.

Da IP-Adressen schwer zu merken sind, geben wir als Besucher bestimmter Websites normalerweise ihre jeweiligen Domain-Namen in das Feld für die URL-Adresse in unseren Browsern ein. Der Browser stellt dann eine Verbindung zu einem DNS-Server her, der die Domänennamen in ihre IP-Adressen übersetzt. Der Browser nimmt dann die zurückgegebene IP-Adresse und stellt eine Verbindung dazu her. Der Browser sendet außerdem einen Host-Header mit der Anforderung, sodass der Server, wenn er mehrere Sites hostet, weiß, welche zurück zu bedienen sind.

Wenn Sie beispielsweise www.google.com in das Adressfeld Ihres Browsers eingeben, wird möglicherweise die folgende Anfrage an den Server unter dieser IP-Adresse gesendet:

Die erste Zeile enthält mehrere Informationen. Erstens gibt es die Methode (in diesem Fall ist es ein GET), den URI, der angibt, welche Seite abgerufen oder welches Programm ausgeführt werden soll (in diesem Fall ist es das mit/gekennzeichnete Stammverzeichnis), und schließlich gibt es das HTTP-Version (in diesem Fall HTTP 1.1).

HTTP ist ein zustandsloses request / response.

HTTP ist ein zustandsloses request / response. Es handelt sich um eine Reihe von Regeln, die die Kommunikation zwischen einem Client und dem Server regeln. Der Client (normalerweise, aber nicht unbedingt ein Webbrowser) stellt eine Anfrage, der Server sendet eine Antwort zurück und die Kommunikation wird gestoppt. Der Server freut sich nicht auf weitere Kommunikation, wie dies bei anderen Protokollen der Fall ist, die nach Beendigung der Anforderung im Wartezustand bleiben.

Wenn die Anforderung erfolgreich ist, gibt der Server einen 200-Statuscode (was bedeutet, dass die Seite gefunden wurde), Antwortheader sowie die angeforderten Daten zurück. Der Antwortheader eines Apache-Servers sieht möglicherweise folgendermaßen aus:

Die erste Zeile im Antwortheader ist die Statuszeile. Es enthält die HTTP-Version und den Statuscode. Als nächstes folgt das Datum und anschließend einige Informationen zum Hostserver und den abgerufenen Daten. Der Content-Type-Header informiert den Client über den Typ der abgerufenen Daten, damit er weiß, wie er damit umgehen soll. Content-Length teilt dem Client die Größe des Antwortkörpers mit. Wenn die Anforderung nicht ausgelöst wird, erhält der Client einen Fehlercode und eine Fehlermeldung, z. B. den folgenden Antwortheader, falls eine Seite nicht gefunden wurde:


TCP/IP-Protokoll

TCP/IP besteht eigentlich aus zwei übereinander aufgebauten Protokollen.

TCP/IP besteht eigentlich aus zwei übereinander aufgebauten Protokollen. Das IP-Protokoll ist dafür verantwortlich, die übertragenen Daten von einem Punt zum anderen zu übertragen. Es nimmt die zu übertragenden Daten zwischen den beiden Punkten auf, teilt sie in kleinere Pakete auf, hängt die Quell- und Zieladressen an jedes Paket an und überträgt die Daten.

TCP übernimmt den Teil, der das Herstellen der Verbindung zwischen den beiden Parteien, das Sicherstellen, dass die Daten an ihrem Ziel ankommen, das Beheben von Datenverlusten und das Verwalten der Datenwiederherstellung umfasst.

Sobald eine Nachricht empfangen wurde, sendet die Zielpartei eine bestätigte Acknowledged (ACK) an den sendenden Host, wenn alles in Ordnung ist, und benachrichtigt ihn über das Eintreffen der Daten. Wenn etwas schief geht, z. B. das Auftreten einer Datenverlustsituation, sendet das Ziel stattdessen eine NAK-Nachricht (Not Acknowledged), die den sendenden Host über das Problem informiert und ihn über die Notwendigkeit informiert, das Datenpaket erneut zu senden.

Wie bereits erwähnt, bietet Apache viele Dienste an, mit denen Clients möglicherweise eine Verbndung herstellen, nutzen oder davon profitieren möchten. TCP verwaltet jeden Dienst so, dass über einen bestimmten Port auf ihn zugegriffen wird, um zwischen den verschiedenen Diensten zu unterscheiden. Auf diese Weise wird sichergestellt, dass eine bestimmte Schnittstelle (oder ein Host) mehrere Dienste anbieten kann. Wenn ein Client eine Verbindung zu einem Host herstellt, übergibt er die Portnummer zusammen mit der IP-Adresse. Browser verwenden das HTTP-Protokoll, das standardmäßig Port 80 verwendet, sodass keine weiteren Spezifikationen erforderlich sind.

Das folgende Bild ist eine Momentaufnahme meiner FTP-Software (WinScp). Wie Sie sehen können, muss ich für FTP auf meinem Server nicht nur die IP-Adresse angeben (oder alternativ den Domänennamen eingeben), sondern auch die Portnummer angeben, über die mein Server den Dienst bereitstellt. Bei FTP lautet die Portnummer 21. Bei SFTP (Secure FTP) lautet die Portnummer 22.

Unter UNIX finden Sie eine Liste der angebotenen Dienste zusammen mit ihren jeweiligen Portnummern in der Datei /etc/services. Der folgende Befehl zeigt den Inhalt der Datei an:

Unten sehen Sie einen Screenshot, der einen Teil der Datei zeigt. Wie Sie sehen können, werden die Dienste in der ersten Spalte aufgelistet, gefolgt von der Portnummer, auf die zugegriffen werden soll, und dem Protokollnamen, den der Dienst verwendet.

Unter Windows heißt die Datei Dienste und befindet sich unter C:\WINNT\system32\drivers\etc\


Inetd

Um Systemressourcen zu schonen, verwaltet UNIX viele seiner Dienste über den Internet-Daemon.

Um Systemressourcen zu schonen, verwaltet UNIX viele seiner Dienste über den internet daemon (inetd), im Gegensatz zu einem ständig laufenden Daemon. Der inetd ist ein Superserver, der dieverschiedenen Ports abhört und Verbindungsanfragen beim Empfang verarbeitet, indem er eine neue Kopie des entsprechenden Daemons (Programms) initiiert. Die neue Kopie des Programms nimmt es dann von dort und arbeitet mit dem Client zusammen. Inted hört wieder auf die Server-Ports, die darauf warten, dass neue Client-Anforderungen verarbeitet werden. Sobald die Anforderung verarbeitet und die Kommunikation beendet ist, wird der Dämon beendet.


Allgemeine Struktur

Wie bereits rwähnt, kann Apache auf einer Vielzahl von Betriebssystemen installiert werden. Unabhängig von der verwendeten Plattform verfügt eine gehostete Website normalerweise über vier Hauptverzeichnisse: htdocs, conf, logs, cgi-bin.

htdocs ist das Standarddokumentverzeichnis des Apache-Webservers. Dies bedeutet, dass es sich um das öffentliche Verzeichnis handelt, dessen Inhalt normalerweise für Clients verfügbar ist, die über das Web eine Verbindung herstellen. Es enthält alle statischen Seiten und dynamischen Inhalte, die bereitgestellt werden sollen, sobald eine HTTP-Anforderung für sie empfangen wurde. Da Dateien und Unterverzeichnisse unter htdocs der Öffentlichkeit zugänglich sind, ist der korrekte Umgang mit Dateiberechtigungen von großer Bedeutung, um die Sicherheit des Servers nicht zu beeinträchtigen.

conf ist das Verzeichnis, in dem sich alle Serverkonfigurationsdateien befinden. Konfigurationsdateien sind im Grunde reine Textdateien, in denen Anweisungen hinzugefügt werden, um das Verhalten und die Funktionalität des Webservers zu steuern. Jede Anweisung wird normalerweise in eine separate Zeile eingefügt, und die Raute (#) gibt einen Kommentar an, sodass die von ihr fortgeführte Zeile ignoriert wird.

logs ist das Verzeichnis, in dem Serverprotokolle aufbewahrt werden, und enthält Apache-Zugriffsprotokolle und Fehlerprotokolle. Der Apache-HTTP-Server bietet eine Vielzahl verschiedener Mechanismen zum Protokollieren aller Ereignisse, von der ersten Anforderung über den URL-Zuordnungsprozess bis zur endgültigen Auflösung der Verbindung, einschließlich etwaiger Fehler, die während des Prozesses aufgetreten sind. Darüber hinaus bieten Module von Drittanbietern möglicherweise Protokollierungsfunktionen oder fügen Einträge in die vorhandenen Protokolldateien ein, und Anwendungen wie PHP-Skripte oder andere Handler senden möglicherweise Nachrichten an das Serverfehlerprotokoll.

cgi-bin ist das Verzeichnis, in dem CGI-Skripte gespeichert werden. Das CGI (Common Gateway Interface) definiert eine Möglichkeit für einen Webserver, mit externen inhaltsgenerierenden Programmen zu interagieren, die häufig als CGI-Programme oder CGI-Skripte bezeichnet werden. Dies sind Programme oder Shell-Skripte, die geschrieben wurden, um von Apache im Auftrag seiner Clients ausgeführt zu werden.

Es ist wichtig zu beachten, dass die oben beschriebenen Datei- und Verzeichnisnamen (sowie Speicherorte) von Server zu Server unterschiedlich sein können, abhängig von der installierten Apache-Variante und dem Betriebssystem, unter dem sie ausgeführt wird. Die Rollen bleiben jedoch gleich.


Abschluss

...mit mehr als der Hälfte der Websites im Web, die darauf ausgeführt werden.

Apache ist seit 1996 der beliebteste Webserver im Internet, auf dem mehr als die Hälfte der Websites im Web ausgeführt wird. Es spielte eine Schlüsselrolle bei der Gestaltung und Gestaltung des World Wide Web zu dem, was es heute ist. Die Gründe für den Erfolg liegen auf der Hand und wie die Dinge aussehen, wird es wahrscheinlich zumindest einige Zeit an der Spitze bleiben. Dies sollte eine Einführungssitzung in diese leistungsstarke Software sein, und ich hoffe, sie hat geholfen, zu verstehen, was dieses großartige Werkzeug ist und wie es im Allgemeinen funktioniert.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.