Apache HTTP Server

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

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 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.

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.

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: Unix is like a wigwam: no windows, no gates - only Apache inside...

Geschichte

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

Installation

SuSE 7.3 Professional

Herunterladen: http://www.apache.org/dist/httpd/

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

Sichern und Entfernen der Original-SUSE Linux-Dateien.

# mkdir /etc/httpd/suse.orig
# mv /etc/httpd/* /etc/httpd/suse.orig
# mv /usr/local/httpd /usr/local/httpd.suse.orig

Anlegen des Verzeichnisses "/home/imd/software" und dort Entpacken der Apache-Datei.

# mkdir /home/imd/software
# cp httpd-2.0.36.tar.gz /home/imd/software
# tar zxf httpd-2.0.36.tar.gz

Installation von Apache nach "/usr/local/apache2".

# cd /home/imd/software/httpd-2.0.36
# ./configure --prefix=/usr/local/apache2
# make
# make install

Inhalt der wichtigsten Verzeichnisse unter "/usr/local/apache2".

Verzeichnis Beschreibung
bin Ausführbare Systemprogramme, z. B. zur Passwortverwaltung
cgi-bin CGI-Programme
conf Apache-Server-Konfigurationsskripte
htdocs HTML-Dokumente
logs Systemlogdateien für das Monitoring von Serveraktivitäten

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.

Distribution Pfad zur Datei "httpd.conf" Standardverzeichnis für Webdateien
Fedora, Red Hat /etc/httpd/conf/* /var/www/html
Debian, Ubuntu /etc/apache2/* /var/www
Novell, OpenSUSE /etc/apache2/* /var/www/htdocs
Linux XAMPP /opt/lampp/etc/httpd.conf /opt/lampp/htdocs

Ä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.

Beschreibung
ServerName 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.
DocumentRoot Das Verzeichnis, in dem die Webdateien (*.html, *.php usw.) sich befinden.
LoadModule 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.
LoadModule php5_module /usr/lib64/apache2/mod_php5.so
AddDefaultCharset Der Zeichensatz der Webdateien.
<Directory "xxx"> 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.
<Directory "verzeichnis ...">
  ...
  AllowOverride AuthConfig FileInfo
  Option Indexes
</Directory>

Innerhalb des Blocks steuern verschiedene Optionen, was in diesem Verzeichnis erlaubt bzw. verboten ist und wer darauf Zugriff hat.

Option Beschreibung
AllowOverride 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

"AuthConfig" (Authentifizierung), "FileInfo" (Sprach- und Zeichensatzeinstellungen, Fehlerdatei), "Indexes", "Limit" (Zugriffsrechte) und "Options".

Options Indexes Wird im Webbrowser der URL "http://rechnername/verzeichnis/" 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.
DirectoryIndexes 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 "http://rechnername/verzeichnis/" eingegeben, so sucht Apache für dieses Verzeichnis nach den angegebenen Dateien und liefert die erste passende Datei.

Passwortschutz für Webverzeichnisse

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.

  • Absicherung in der Datei "httpd.conf": In der Datei "httpd.conf" kann genau eingestellt werden, von welchen Adressen die Webseiten eines bestimmten Verzeichnisses gelesen werden dürfen.
  • Absicherung durch eine Firewall: 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.
  • Passwortabsicherung einzelner Verzeichnisse: 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

Einrichtung von Zugriffskontrollen und Authentifizierung auf dem Webserver.

Der Apache HTTP Server ist der beliebteste Webserver, der viele integrierte Sicherheitsmechanismen bietet, u. a.

  • Host-basierte Netzwerkzugriffskontrolle (über die Direktiven "order", "allow" und "deny")
  • 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.

ExecCGI 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.).
FollowSymLinks Ermöglicht entfernten Benutzern, symbolischen Verknüpfungne zu folgen, indem sie einfach auf ihre Hyperlinks klicken.
Includes 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
Indexes Ermöglicht eine Verzeichnisinhaltsauflistung, wenn Apache keine Standardseite findet.

Verwendung

Starten des Apache-Servers.

# /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

Oder Verwendung des Startskripts "/etc/rc.d/apache start" (muss vorher angepasst werden!)

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.

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.

#!/bin/bash
IFS=$'\n'
for l in $(cat access_log)
  do
  IFS=" "
  echo "${l}  " | cut -d" " -f7
  done

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.

#!/bin/bash
exec 3<access_log
while read -u 3 Anfrage
  do
  Anfrage="${Anfrage##*GET }"
  echo "${Anfrage%% HTTP/*}"
  done

Weblinks

Vorlage:dewi