Apache HTTP Server: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
 
(22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Der <b>Apache HTTP Server</b> (auch: Apache) ist ein Produkt der Apache Software Foundation und der meistbenutzte [[Webserver]] im Internet.
Der <b>Apache HTTP Server</b> (auch: Apache) ist ein Produkt der [[Apache Software Foundation]] und der meistbenutzte [[Webserver]] im Internet. Neben Unix und Linux unterstützt er auch Windows (Win32), Netware sowie viele weitere Betriebssysteme.  


Neben Unix und Linux unterstützt Apache auch Windows (Win32), NetWare sowie viele weitere Betriebssysteme. In Version 2.0 wurde die Stabilität und Geschwindigkeit des Servers erheblich verbessert: Die Bibliothek Apache Portable Runtime (APR) stellt eine Verallgemeinerung wichtiger Systemaufrufe zur Verfügung, sodass die Stärken des jeweiligen Betriebssystems ausgenutzt werden können. Hinzu kommen verschiedene Multiprocessing-Module (MPM), die je nach Plattform unterschiedliche Lösungen für die gleichzeitige Bedienung mehrerer Client-Anfragen anbieten.
Gegenwärtig werden noch die folgenden stabilen Versionen unterstützt und somit beispielsweise mit Sicherheitsupdates versorgt. Die Apache-Entwickler empfehlen aber, die Version 2.2.x einzusetzen, da sie diese Version für die beste erhältliche halten.


Der Apache ist modular aufgebaut: Durch entsprechende Module kann er beispielsweise die Kommunikation zwischen Webbrowser und Webserver verschlüsseln (mod_ssl), als Proxyserver eingesetzt werden (mod_proxy) oder komplexe Manipulationen von HTTP-Kopfdaten (mod_headers) und URLs (mod_rewrite) durchführen.
{| class=wiki
 
! Entwicklungsreihe !! Aktuelle Version <br><small>(August 2009)</small>
Der Apache bietet die Möglichkeit, mittels serverseitiger Skriptsprachen Webseiten dynamisch zu erstellen. Häufig verwendete Skriptsprachen sind [[PHP]], [[Perl]] oder [[Ruby]]. Diese sind kein Bestandteil des Webservers, sondern müssen ebenfalls entweder als Module eingebunden werden oder über das CGI angesprochen werden. Über das bei der Apache-Installation enthaltene mod_include kann Server Side Includes (SSI) ausgeführt werden. Damit können einfache dynamische Webseiten erstellt und der Verwaltungsaufwand von statischen Webseiten minimiert werden.
 
Gegenwärtig werden noch die stabilen Versionen 1.3.x, 2.0.x und 2.2.x unterstützt und somit beispielsweise mit Sicherheitsupdates versorgt. Die Apache-Entwickler empfehlen aber, die Version 2.2.x einzusetzen, da sie diese Version für die beste erhältliche halten.
 
Merke: <i>Unix is like a wigwam: no windows, no gates - only Apache inside...</i>
 
== Geschichte ==
 
{| class=wikitable
! Datum !! Version !! Beschreibung
|-
|-
| 1995.04 || Apache 0.6.2 || allererste öffentlich verteilte Version
| <b>1.3.x</b> || Apache HTTP Server 1.3.41
|-
|-
| 1995.12.01 || Apache 1.0 ||
| <b>2.0.x</b> || Apache HTTP Server 2.0.63
|-
|-
| || Apache 2.0 ||
| <b>2.2.x</b> || Apache HTTP Server 2.2.12
|}
|}


== Installation ==
Merke: <i>Unix is like a wigwam: no windows, no gates - only Apache inside...</i>
 
=== SuSE 7.3 Professional ===
 
Herunterladen: http://www.apache.org/dist/httpd/


Installationsanleitung: http://www.apache.org/docs-2.0/install.html
== Funktionsweise ==


Sichern und Entfernen der Original-SUSE Linux-Dateien.
Der Webserver-[[Daemon]] des Apache HTTP Server heisst <b>[[httpd]]</b> und arbeitet im Hintergrund. Beim Starten des Dienstes wird er als erster Prozess angestossen. Erst später kommen je nach Konfiguration (und je nach Anzahl Zugriffe auf den Webserver) weitere httpd-Instanzen als Kindprozesse dazu.


# <b>mkdir /etc/httpd/suse.orig</b>
In Version 2.0 wurde die Stabilität und Geschwindigkeit des Apache HTTP Server erheblich verbessert: Die Bibliothek Apache Portable Runtime / APR stellt eine Verallgemeinerung wichtiger Systemaufrufe zur Verfügung, sodass die Stärken des jeweiligen Betriebssystems ausgenutzt werden können.
# <b>mv /etc/httpd/* /etc/httpd/suse.orig</b>
# <b>mv /usr/local/httpd /usr/local/httpd.suse.orig</b>


Anlegen des Verzeichnisses "/home/imd/software" und dort Entpacken der Apache-Datei.
Verschiedene Multiprocessing-Module / MPM bieten je nach Plattform unterschiedliche Lösungen für die gleichzeitige Bedienung mehrerer Client-Anfragen an.
* das MPM "prefork" bildet das Verhalten des Apache HTTP Server 1.3 nach und stellt gewissermasssen den Kompatibilitätsmodus des Apache HTTP Server 2 dar. Dieses MPM eignet sich besonders, wenn etwa PHP als Modul und nicht über das CGI eingebunden werden soll.
* das MPM "worker" verschafft dem Webserver Multithreading-Fähigkeit und damit Performancegewinn.
* weitere MPMs befinden sich noch im Experimentalstadium.


# <b>mkdir /home/imd/software</b>
Wird der Apache HTTP Server selber kompiliert, so kommt standardmässig das MPM "prefork" zum Zuge, ein anderes Modul muss mit der configure-Option "--with-mp=<i>mpm-name</i> ausgewählt werden.
# <b>cp httpd-2.0.36.tar.gz /home/imd/software</b>
# <b>tar zxf httpd-2.0.36.tar.gz</b>


Installation von Apache nach "/usr/local/apache2".
Der Apache HTTP Server ist modular aufgebaut: Durch entsprechende Module kann er beispielsweise die Kommunikation zwischen Webbrowser und Webserver verschlüsseln ("mod_ssl"), als Proxyserver eingesetzt werden ("mod_proxy") oder komplexe Manipulationen von HTTP-Kopfdaten ("mod_headers") und URLs ("mod_rewrite") durchführen. Von allen in der Apache HTTP Server-Distribution enthaltenen Modulen werden auf Unix-artigen Betriebssystemen standardmässig nur die Basismodule kompiliert und statisch gelinkt. Soll eines davon nicht eingesetzt werden, so muss es ausdrücklich von der Kompilierung ausgenommen werden. Erweiterungs- und experimentelle Module dagegen müssen ausdrücklich hinzugefügt werden. Die Basismodule sind die folgenden:


# <b>cd /home/imd/software/httpd-2.0.36</b>
{| class=wiki width=100%
# <b>./configure --prefix=/usr/local/apache2</b>
! colspan=2 | Apache HTTP Server 2-Basismodule
# <b>make</b>
# <b>make install</b>
 
Inhalt der wichtigsten Verzeichnisse unter "/usr/local/apache2".
 
{| class=wikitable
! Verzeichnis !! Beschreibung
|-
|-
| <tt>bin</tt> || Ausführbare Systemprogramme, z. B. zur Passwortverwaltung
! Modul !! Beschreibung
|-
|-
| <tt>cgi-bin</tt> || CGI-Programme
| core<br>mpm_common || Nicht deaktivierbare Kernmodule des Webservers.
|-
|-
| <tt>conf</tt> || Apache-Server-Konfigurationsskripte
| mod_access<br>mod_auth || Rechner- und benutzerbasierte Zugriffskontrolle.
|-
|-
| <tt>htdocs</tt> || HTML-Dokumente
| mod_actions<br>mod_cgi<br>mod_cgid || Führen Skripte als Handler oder CGI-Anwendungen aus. Das Modul "mod_cgid" wird beim Verwendung von Multithreading-MPMs automatisch ausgewählt.
|-
|-
| <tt>logs</tt> || Systemlogdateien für das Monitoring von Serveraktivitäten
| mod_alias<br>mod_dir<br>mod_userdir || URL-Abbildung und Verzeichnishandling.
|}
 
== Konfiguration ==
 
Beinahe alle Einstellungen von Apache werden durch die Datei "httpd.conf" gesteuert: Servername, Orte von Webverzeichnissen und Logdateien, die Zugriffsrechte, die Integration von [[PHP]] usw. Bei den meisten Linux-Distributionen gibt es nicht eine Konfigurationsdatei "httpd.conf", sonderen gleich ein ganzes Bündel. Das macht jede einzelne Datei übersichtlicher und ermöglicht eine modulare Konfiguration - gleichzeitig erschwert es aber den Überblick.
 
Bei Opensuse- bzw. Novell-Distributionen kommt dazu, dass viele Apache-Konfigurationsdateien bei jedem Start neu erstellt werden. Eigene Änderungen sollten dort in der Datei "/etc/apache2/httpd.conf.local" durchgeführt werden. Damit diese Datei berücksichtigt wird, muss dieser Dateiname in die Variable "APACHE_CONF_INCLUDE_FILES" in der Datei "/etc/sysconfig/apache2" eingefügt werden.
 
{| class=wikitable
! Distribution !! Pfad zur Datei "httpd.conf" !! Standardverzeichnis für Webdateien
|-
|-
| Fedora, Red Hat || <tt>/etc/httpd/conf/*</tt> || <tt>/var/www/html</tt>
| mod_asis || Dateien mit eigenen Headern senden.
|-
|-
| Debian, Ubuntu || <tt>/etc/apache2/*</tt> || <tt>/var/www</tt>
| mod_autoindex || Automatische Indexerstellung für [[Verzeichnisse]].
|-
|-
| Novell, OpenSUSE || <tt>/etc/apache2/*</tt> || <tt>/var/www/htdocs</tt>
| mod_env<br>mod_setenvif || Beeinflussung von [[Umgebungsvariablen]].
|-
|-
| Linux XAMPP || <tt>/opt/lampp/etc/httpd.conf</tt> || <tt>/opt/lampp/htdocs</tt>
| mod_imap || Serverseitige [[verweissensitive Grafiken]] (engl. image maps).
|}
 
Änderungen an der Konfiguration werden erst wirksam, wenn der Apache-Webserver neu gestartet wird.
 
Zu beachten ist, dass der Apache HTTP Server unter einem eigenen Benutzerkontro läuft (oft "nobody", bei SUSE "wwwrun"). Bei allen Webdateien müssen die Zugriffsrechte so eingestellt werden, dass dieser Benutzer und damit auch Apache sie lesen kann.
 
=== Grundeinstellungen ===
 
Zu den wichtigsten Einstellungen gehören die folgenden.
 
{| class=wikitable
! !! Beschreibung
|-
|-
| <tt>ServerName</tt> || Netzwerkname des Rechners, auf dem der Apache HTTP Server läuft. Unter diesem Namen ist er von anderen Rechnern aus im Netzwerk erreichbar. Fehlt die Einstellung, so versucht Apache, den Netzwerknamen selbst herauszufinden.
| mod_include || Ausführung von Server Side Includes / SSI. Damit können einfache dynamische Webseiten erstellt und der Verwaltungsaufwand von statischen Webseiten minimiert werden.
|-
|-
| <tt>DocumentRoot</tt> || Das Verzeichnis, in dem die Webdateien (*.html, *.php usw.) sich befinden.
| mod_log_config || [[Protokollierung]].
|-
|-
| <tt>LoadModule</tt> || Wenn der Apache HTTP Server so kompiliert wurde, dass er zur Laufzeit Module laden kann (das ist meist der Fall), so sind dafür "LoadModule"-Anweisungen erforderlich, die beispielsweise wie folgt aussehen.
| mod_mime<br>mod_negotiation || Auswahl und Zuordnung von [[MIME]]-Type, Sprache und Kodierung.
LoadModule php5_module /usr/lib64/apache2/mod_php5.so
|-
|-
| <tt>AddDefaultCharset</tt> || Der [[Zeichensatz]] der Webdateien.
| mod_status || Webserverüberwachung.
|-
|-
| <tt><Directory "xxx"></tt> || Dieser aus mehreren Zeilen bestehende Block beschreibt alle Eigenschaften eines Webverzeichnisses. "<Directory />" enthält die Standardeinstellungen, die unter anderem auch für "DocumentRoot" gelten. Der "<Directory>"-Block endet mit "</Directory>" und kann beispielsweise wie folgt aussehen.
| http || Unterstützung für das [[Hypertext Transfer Protocol]]. Dieses Modul macht den Apache HTTP Server erst zu einem HTTP-Server.
<Directory "<i>verzeichnis</i>">
|}
  ...
 
  AllowOverride AuthConfig FileInfo
Der Apache bietet die Möglichkeit, mittels serverseitiger Skriptsprachen Webseiten dynamisch zu erstellen. Häufig verwendete Skriptsprachen sind [[Perl]], [[PHP]] und [[Ruby]]. Diese sind kein Bestandteil des Webservers, sondern müssen ebenfalls entweder als Module ("mod_perl", "mod_php" usw.) eingebunden werden oder über das [[Common Gateway Interface]] / CGI angesprochen werden. Ein Nachteil der CGI-Variante ist allerdings der damit einhergehende Performanceverlust.
  Option Indexes
</Directory>


Innerhalb des Blocks steuern verschiedene Optionen, was in diesem Verzeichnis erlaubt bzw. verboten ist und wer darauf Zugriff hat.
== Geschichte ==
{| class=wikitable
 
! Option !! Beschreibung
{| class=wiki
! Datum !! Version !! Beschreibung
|-
| 1995.04 || Apache HTTP Server 0.6.2 || allererste öffentlich verteilte Version
|-
|-
| <tt>AllowOverride</tt> || Oft ist es erwünscht, dass der Apache HTTP Server in Webverzeichnissen die Datei ".htaccess" auswertet und die darin enthaltenen Einstellungen auf das Verzeichnis anwendet. Dazu muss mit "AllowOverride" angegeben werden, welche Veränderungen zulässig sind. Mögliche Einstellungen sind "None" (verbietet alle Änderungen und ist oft die Standardeinstellung), "All" (erlaubt alle Änderungen) oder eine Kombination aus
| 1995.12.01 || Apache HTTP Server 1.0 ||
"AuthConfig" (Authentifizierung), "FileInfo" (Sprach- und Zeichensatzeinstellungen, Fehlerdatei), "Indexes", "Limit" (Zugriffsrechte) und "Options".
|-
|-
| <tt>Options Indexes</tt> || Wird im Webbrowser der URL "<nowiki>http://rechnername/verzeichnis/</nowiki>" angegeben wird, so liefert der Apache HTTP Server je nach Konfiguration von "DirectoryIndex" automatisch die Seite "index.html", "index.php" usw. Sollte keine der "DirectoryIndex"-Dateien vorhanden sein, so bewirkt "Options Indexes", dass ein Inhaltsverzeichnis angezeigt wird. Das ist während der Programmentwicklung oft nützlich, kann im Echtbetrieb aber ein Sicherheitsrisiko darstellen.
| 2002.04 || Apache HTTP Server 2.0 ||
|}
|}


|-
== [[/Installation|Installation]] ==
| <tt>DirectoryIndexes</tt> || Angabe einer oder mehrerer Dateien, nach denen der Apache HTTP Server sucht, wenn im Webbrowser nur ein Verzeichnis angegeben wird. Eine übliche Einstellung lautet "index.html index.php main.php default.php". Wird im Browser nun der URL "<nowiki>http://rechnername/verzeichnis/</nowiki>" eingegeben, so sucht Apache für dieses Verzeichnis nach den angegebenen Dateien und liefert die erste passende Datei.
|}


=== Passwortschutz für Webverzeichnisse ===
== [[/Konfiguration|Konfiguration]] ==


Sobald der Apache HTTP Server läuft, hat jeder im Netz bzw. Internet Zugang zu allen von Apache verarbeitbaren Webseiten. Der Zugriff kann auf drei Arten eingeschränkt werden.
== Verwendung ==
* <b>Absicherung in der Datei "httpd.conf":</b> In der Datei "httpd.conf" kann genau eingestellt werden, von welchen Adressen die Webseiten eines bestimmten Verzeichnisses gelesen werden dürfen.
* <b>Absicherung durch eine Firewall:</b> Wird auf dem Rechner eine Firewall betrieben, so kann diese so konfiguriert werden, dass Apache nicht von aussen (also über das Netzwerk) kontaktiert werden kann. Die Webseiten können dann nur vom lokalen Rechner aus betrachtet werden.
* <b>Passwortabsicherung einzelner Verzeichnisse:</b> Im zu schützenden Verzeichnis wird eine Datei mit dem Namen "[[.htaccess]]" angelegt und dort angegeben, dass dieses Verzeichnis erst nach einer vorherigen Authentifizierung durch Name und Passwort gelesen werden kann. Apache wertet diese Datei aus und zeigt allen Surfern, die Dateien aus diesem Verzeichnis mit ihrem Webbrowser ansehen möchten, ein Anmeldefenster.


=== Absicherung des Apache HTTP-Servers ===
=== Starten des Apache HTTP Servers ===


Einrichtung von Zugriffskontrollen und Authentifizierung auf dem Webserver.
Je nach Linux-Distribution findet sich im Verzeichnis "/etc/init.d" üblicherweise ein Skript (im Beispiel namens "apache") zum Starten und Stoppen des Apache HTTP Server. Das Starten und Stoppen des Webservers erfolgt damit wie folgt.


Der Apache HTTP Server ist der beliebteste Webserver, der viele integrierte Sicherheitsmechanismen bietet, u. a.
$ <b>/etc/init.d/apache start</b>
* Host-basierte Netzwerkzugriffskontrolle (über die Direktiven "order", "allow" und "deny")
$ <b>/etc/init.d/apache stop</b>
* Kontrolle darüber, ob und wo lokale Benutzer CGI-Skripte laufen lassen können.
* Kontrolle darüber, ob und wie lokale Benutzer die Einstellungen ausser Kraft setzen können.


Einige wichtige Optionen (Direktive "Options") sind die folgenden.
Weitere Optionen dieses Startskripts sind:
{| class=wikitable
* "reload" liest nur die Konfigurationsdatei "httpd.conf" neu ein, ohne den Apache HTTP Server neu zu starten.
| <tt>ExecCGI </tt> || Legt fest, dass CGI-Skripte unter dieser Verzeichnishierarchie ausgeführt werden können. Das [[Common Gateway Interface]] / CGI ist plattform- und sprachenneutral, CGI-Programme können deshalb in jeder Sprache geschrieben werden, z. B. BASIC, C/C++, Perl, Python, TCL, Shell-Sprachen (sh, bash usw.).
* "restart" fährt einen bereits laufenden Apache HTTP Server zu erst herunter und anschliessend wieder hoch.
|-
| <tt>FollowSymLinks</tt> || Ermöglicht entfernten Benutzern, symbolischen Verknüpfungne zu folgen, indem sie einfach auf ihre Hyperlinks klicken.
|-
| <tt>Includes</tt> || Bestimmt, dass der Apache HTTP Server sogenannte Server Side Includes / SSI verarbeitet, ein System, mit dem Webmaster aktuelle Informationen in HTML-Dokumente einfügen können, ohne CGI-Programme schreiben zu müssen. Um Standard-SSI ohne die exec-Direktive zu aktivieren, wird die Optionenzeile wie folgt geändert.
Options IncludesNOEXEC
|-
| <tt>Indexes</tt> || Ermöglicht eine Verzeichnisinhaltsauflistung, wenn Apache keine Standardseite findet.
|}


== Verwendung ==
Zusätzlich bringt Apache von sich aus das Skript "apachectl" mit; dieses ist z. B. im Verzeichnis "/usr/local/apache2/bin" zu finden. Zusätzlich zu "start", "stop" und "restart" besitzt dieses Skript folgende Optionen:
* "graceful" liest nur die Konfigurationsdatei "httpd.conf" neu ein, ohne den Apache HTTP Server neu zu starten.
* "configtest" testet nur die aktuelle Konfiguration.


Starten des Apache-Servers.
Starten des Apache HTTP Server


  # <b>/usr/local/apache2/bin/apachectl start</b>
  # <b>/usr/local/apache2/bin/apachectl start</b>
Zeile 167: Zeile 109:
  root      4630  866  0 12:24 tty2    00:00:00 grep httpd
  root      4630  866  0 12:24 tty2    00:00:00 grep httpd


Oder Verwendung des Startskripts "/etc/rc.d/apache start" (muss vorher angepasst werden!)
Anzeige der aktuell laufenden Instanzen des Apache HTTP Servers.
 
Aufruf des Apache-Servers über den Browser mit http://hostname/
 
== Auswertung der Datei "access_log" ==


Um festzustellen, welche Seiten abgefragt wurden, wird die GET-Zeichenkette aus der Datei "/var/log/apache2/access_log" herausgelöst.
$ <b>ps waux | grep httpd</b>
bzw.
$ <b>ps waux | grep apache</b>
root      9800  0.0  0.4  23812  7144 ? Ss 09:12 0:01 /usr/sbin/apache2 -k start
www-data  9816  0.0  0.7  28636 11764 ? S  09:12 0:00 /usr/sbin/apache2 -k start
www-data  9820  0.0  0.8  29904 12916 ? S  09:12 0:00 /usr/sbin/apache2 -k start
...


Eine externe Logauswertung erfolgt mit folgendem Skript: Der Aufruf von "cat" liest zunächst die Logdatei vollständig ein und übergibt sie der for-Schleife als Parameterliste - die Bash muss den gesamten Dateiinhalt also erst mal zwischenspeichern. Anschliessend wird für jeden Logeintrag "cut" als externes Programm aufgerufen.
Nach erfolgreichem Start des Apache HTTP Servers kann er über den Webbrowser mit "http://<i>rechnername</i>/" aufgerufen werden, je nach Konfiguration z. B. über http://localhost/.
<pre>
#!/bin/bash
IFS=$'\n'
for l in $(cat access_log)
  do
  IFS=" "
  echo "${l}  " | cut -d" " -f7
  done
</pre>


Eine interne Logauswertung erfolgt mit folgendem, wesentlich schnellerem Skript. Es öffnet die Logdatei über den Dateideskriptor 3 und liest in der while-Schleife jeweils eine zeile in die Variable "Anfrage" - die Bash braucht also stets nur einen Logeintrag zwischenzuspeichern. Anschliessend werden vom Zeilenanfang bis einschliesslich "GET " und vom Ende alle Zeichen bis einschliesslich " HTTP/" entfernt.
== [[/Protokollierung|Protokollierung]] ==
<pre>
#!/bin/bash
exec 3<access_log
while read -u 3 Anfrage
  do
  Anfrage="${Anfrage##*GET }"
  echo "${Anfrage%% HTTP/*}"
  done
</pre>


== Weblinks ==
== Weblinks ==


{{Weblinks|{{url|DE|Apache Friends|ger|http://www.apachefriends.org/|Apache Friends}}
{{Weblinks}}
{{url|US|Apache Software Foundation|enge|http://httpd.apache.org/|Apache HTTP Server project|Offizielle Homepage}}
{{url|DE|Apache Friends|ger|http://www.apachefriends.org/|Apache Friends}}
{{url_dewikipedia|Apache_HTTP_Server|Apache HTTP Server}}
{{url_dewikipedia|Apache_HTTP_Server|Apache HTTP Server}}
}}
{{Fuss}}




{{cat|Apache}}
{{cat|Apache HTTP Server}}
{{cat|HTTP}}
{{cat|Hypertext Transfer Protocol}}
{{cat|Webserver}}
{{cat|Webserver}}

Aktuelle Version vom 6. August 2011, 17:48 Uhr

Der Apache HTTP Server (auch: Apache) ist ein Produkt der Apache Software Foundation und der meistbenutzte Webserver im Internet. Neben Unix und Linux unterstützt er auch Windows (Win32), Netware sowie viele weitere Betriebssysteme.

Gegenwärtig werden noch die folgenden stabilen Versionen unterstützt und somit beispielsweise mit Sicherheitsupdates versorgt. Die Apache-Entwickler empfehlen aber, die Version 2.2.x einzusetzen, da sie diese Version für die beste erhältliche halten.

Entwicklungsreihe Aktuelle Version
(August 2009)
1.3.x Apache HTTP Server 1.3.41
2.0.x Apache HTTP Server 2.0.63
2.2.x Apache HTTP Server 2.2.12

Merke: Unix is like a wigwam: no windows, no gates - only Apache inside...

Funktionsweise

Der Webserver-Daemon des Apache HTTP Server heisst httpd und arbeitet im Hintergrund. Beim Starten des Dienstes wird er als erster Prozess angestossen. Erst später kommen je nach Konfiguration (und je nach Anzahl Zugriffe auf den Webserver) weitere httpd-Instanzen als Kindprozesse dazu.

In Version 2.0 wurde die Stabilität und Geschwindigkeit des Apache HTTP Server erheblich verbessert: Die Bibliothek Apache Portable Runtime / APR stellt eine Verallgemeinerung wichtiger Systemaufrufe zur Verfügung, sodass die Stärken des jeweiligen Betriebssystems ausgenutzt werden können.

Verschiedene Multiprocessing-Module / MPM bieten je nach Plattform unterschiedliche Lösungen für die gleichzeitige Bedienung mehrerer Client-Anfragen an.

  • das MPM "prefork" bildet das Verhalten des Apache HTTP Server 1.3 nach und stellt gewissermasssen den Kompatibilitätsmodus des Apache HTTP Server 2 dar. Dieses MPM eignet sich besonders, wenn etwa PHP als Modul und nicht über das CGI eingebunden werden soll.
  • das MPM "worker" verschafft dem Webserver Multithreading-Fähigkeit und damit Performancegewinn.
  • weitere MPMs befinden sich noch im Experimentalstadium.

Wird der Apache HTTP Server selber kompiliert, so kommt standardmässig das MPM "prefork" zum Zuge, ein anderes Modul muss mit der configure-Option "--with-mp=mpm-name ausgewählt werden.

Der Apache HTTP Server ist modular aufgebaut: Durch entsprechende Module kann er beispielsweise die Kommunikation zwischen Webbrowser und Webserver verschlüsseln ("mod_ssl"), als Proxyserver eingesetzt werden ("mod_proxy") oder komplexe Manipulationen von HTTP-Kopfdaten ("mod_headers") und URLs ("mod_rewrite") durchführen. Von allen in der Apache HTTP Server-Distribution enthaltenen Modulen werden auf Unix-artigen Betriebssystemen standardmässig nur die Basismodule kompiliert und statisch gelinkt. Soll eines davon nicht eingesetzt werden, so muss es ausdrücklich von der Kompilierung ausgenommen werden. Erweiterungs- und experimentelle Module dagegen müssen ausdrücklich hinzugefügt werden. Die Basismodule sind die folgenden:

Apache HTTP Server 2-Basismodule
Modul Beschreibung
core
mpm_common
Nicht deaktivierbare Kernmodule des Webservers.
mod_access
mod_auth
Rechner- und benutzerbasierte Zugriffskontrolle.
mod_actions
mod_cgi
mod_cgid
Führen Skripte als Handler oder CGI-Anwendungen aus. Das Modul "mod_cgid" wird beim Verwendung von Multithreading-MPMs automatisch ausgewählt.
mod_alias
mod_dir
mod_userdir
URL-Abbildung und Verzeichnishandling.
mod_asis Dateien mit eigenen Headern senden.
mod_autoindex Automatische Indexerstellung für Verzeichnisse.
mod_env
mod_setenvif
Beeinflussung von Umgebungsvariablen.
mod_imap Serverseitige verweissensitive Grafiken (engl. image maps).
mod_include Ausführung von Server Side Includes / SSI. Damit können einfache dynamische Webseiten erstellt und der Verwaltungsaufwand von statischen Webseiten minimiert werden.
mod_log_config Protokollierung.
mod_mime
mod_negotiation
Auswahl und Zuordnung von MIME-Type, Sprache und Kodierung.
mod_status Webserverüberwachung.
http Unterstützung für das Hypertext Transfer Protocol. Dieses Modul macht den Apache HTTP Server erst zu einem HTTP-Server.

Der Apache bietet die Möglichkeit, mittels serverseitiger Skriptsprachen Webseiten dynamisch zu erstellen. Häufig verwendete Skriptsprachen sind Perl, PHP und Ruby. Diese sind kein Bestandteil des Webservers, sondern müssen ebenfalls entweder als Module ("mod_perl", "mod_php" usw.) eingebunden werden oder über das Common Gateway Interface / CGI angesprochen werden. Ein Nachteil der CGI-Variante ist allerdings der damit einhergehende Performanceverlust.

Geschichte

Datum Version Beschreibung
1995.04 Apache HTTP Server 0.6.2 allererste öffentlich verteilte Version
1995.12.01 Apache HTTP Server 1.0
2002.04 Apache HTTP Server 2.0

Installation

Konfiguration

Verwendung

Starten des Apache HTTP Servers

Je nach Linux-Distribution findet sich im Verzeichnis "/etc/init.d" üblicherweise ein Skript (im Beispiel namens "apache") zum Starten und Stoppen des Apache HTTP Server. Das Starten und Stoppen des Webservers erfolgt damit wie folgt.

$ /etc/init.d/apache start
$ /etc/init.d/apache stop

Weitere Optionen dieses Startskripts sind:

  • "reload" liest nur die Konfigurationsdatei "httpd.conf" neu ein, ohne den Apache HTTP Server neu zu starten.
  • "restart" fährt einen bereits laufenden Apache HTTP Server zu erst herunter und anschliessend wieder hoch.

Zusätzlich bringt Apache von sich aus das Skript "apachectl" mit; dieses ist z. B. im Verzeichnis "/usr/local/apache2/bin" zu finden. Zusätzlich zu "start", "stop" und "restart" besitzt dieses Skript folgende Optionen:

  • "graceful" liest nur die Konfigurationsdatei "httpd.conf" neu ein, ohne den Apache HTTP Server neu zu starten.
  • "configtest" testet nur die aktuelle Konfiguration.

Starten des Apache HTTP Server

# /usr/local/apache2/bin/apachectl start
# ps -ef | grep httpd
root      4621     1  0 12:23 ?        00:00:00 /usr/local/apache2/bin/httpd
bin       4622  4621  0 12:23 ?        00:00:00 /usr/local/apache2/bin/httpd
bin       4623  4621  0 12:23 ?        00:00:00 /usr/local/apache2/bin/httpd
bin       4624  4621  0 12:23 ?        00:00:00 /usr/local/apache2/bin/httpd
bin       4625  4621  0 12:23 ?        00:00:00 /usr/local/apache2/bin/httpd
bin       4626  4621  0 12:23 ?        00:00:00 /usr/local/apache2/bin/httpd
root      4630   866  0 12:24 tty2     00:00:00 grep httpd

Anzeige der aktuell laufenden Instanzen des Apache HTTP Servers.

$ ps waux | grep httpd
bzw.
$ ps waux | grep apache
root      9800  0.0  0.4  23812  7144 ? Ss 09:12 0:01 /usr/sbin/apache2 -k start
www-data  9816  0.0  0.7  28636 11764 ? S  09:12 0:00 /usr/sbin/apache2 -k start
www-data  9820  0.0  0.8  29904 12916 ? S  09:12 0:00 /usr/sbin/apache2 -k start
...

Nach erfolgreichem Start des Apache HTTP Servers kann er über den Webbrowser mit "http://rechnername/" aufgerufen werden, je nach Konfiguration z. B. über http://localhost/.

Protokollierung

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
Apache Software Foundation enge Apache HTTP Server projectwbm Offizielle Homepage
Apache Friends ger Apache Friendswbm
Wikipedia ger Apache HTTP Serverwbm Enzyklopädischer Artikel