Zurück | Kapitel 9. Server-Dienste | Weiter

## Kapitel 9. Server-Dienste

## 9.1 Apache

Anfang 1995 war die beliebteste Server-Software für das WWW (World Wide Web) der frei verfügbare HTTP-(Hypertext Transfer Protocol)-Server „NCSA“, der von Rob McCool am National Center for Supercomputing Applications (daher der Name: NCSA), University of Illinois, Urbana-Champaign, entwickelt wurde. Zu dieser Zeit fand aber schon keine weitere Entwicklung mehr statt, da Rob McCool fast ein Jahr zuvor das NCSA verlassen hatte. Viele Webmaster entwickelten eigene Erweiterungen und beseitigten Fehler. Einige dieser Webmaster kommunizierten miteinander und koordinierten ihre Entwicklungen in Form von so genannten „Patches“.

Diese Vielzahl der Patches führte auch zum Namen: „A PAtCHy server“ - Apache (http://www.apache.org).

Auf Basis des NCSA httpd Version 1.3 und allen verfügbaren Patches entstand im April 1995 die erste offizielle Version 0.6.2 des Apache Webservers. Bereits im Dezember 1995 wurde die Version 1.0 veröffentlicht, die auch intern komplett überarbeitet war. Bereits ein Jahr, nachdem die Entwicklung aufgenommen worden war, konnte der Apache mehr Installationen aufweisen als der NCSA-Server.

Auch wenn Sie Ihren Rechner nicht permanent am Netz betreiben, macht ein eigener Webserver auf Ihrem System Sinn. Bei der Entwicklung eigener Webseiten können Sie diese sofort „live“ auf Ihrem System testen. Sie müssen dazu nicht die Seiten erst auf den Server Ihres Providers übertragen. Ebenso können Sie selbst geschriebene CGI-Programme gleich testen.

### LAMP

Als LAMP bezeichnet man die häufig verwendete Kombination von Linux, Apache, MySQL und PHP. Auf der Webseite http://www.dotdeb.org/ stehen aktuelle Pakete von Apache, PHP und MySQL als Debian-Pakete zur Verfügung.

### 9.1.1 Apache installieren und einrichten

Die Installation von Apache können Sie wie gewohnt mit `apt-get install apache` durchführen. Auch dieses Paket beinhaltet ein Konfigurationskript, das während der Installation gestartet wird. Wenn Sie Apache später neu konfigurieren möchten, können Sie das mit dem Programm `apacheconfig` durchführen.

    sushi:~# apt-get install apache
    Reading Package Lists... 100%
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following NEW packages will be installed:
      apache
    0 packages upgraded, 1 newly installed, 0 to remove and 246 not upgraded.
    Need to get 0B/356kB of archives. After unpacking 666kB will be used.
    Selecting previously deselected package apache.
    (Reading database ... 64458 files and directories currently installed.)
    Unpacking apache (from .../web/apache_1.3.9-10.deb) ...
    Setting up apache (1.3.9-10) ...

    Installing new configuration file /etc/apache/httpd.conf ...
    Installing new configuration file /etc/apache/access.conf ...
    Installing new configuration file /etc/apache/srm.conf ...
    Installing new configuration file /etc/apache/cron.conf ...
    Updating alias /doc/ -> /usr/doc/ in srm.conf (for Debian docs).

    Your config files will not be modified until you select Y at "save changes."

    Enter the email address of your server administrator.  This address
    will be used in error messages allowing users to submit reports of
    faulty links or misconfigured cgi-programs to you. It should be an email
    address that corresponds to a human.

    Who should the ServerAdmin be? [you@your.address] fr@openoffice.de

Geben Sie hier Ihre E-Mail-Adresse an. Diese Adresse können Sie später automatisch in Ihre Webseiten einbinden, zum Beispiel wenn es gewünscht ist, den Betreiber des Servers (Webmaster) zu erreichen.

    The DocumentRoot is set to /var/www.
    Installing your new homepage in /var/www.

    This release of the Apache server can be configured to load only certain
    modules into memory.  This program can automagically configure Apache
    so only modules that are actually needed are loaded.

    Do you want to manually choose which modules to load? [y/N]

Das Paket `apache` enthält eine ganzen Reihe von Modulen, die, ähnlich wie die Module des Linux-Kernels, die Funktionalität des Webservers erweitern. Wir werden später noch einige interessante Module vorstellen. Sie können jetzt aber ohne Probleme darauf verzichten, weitere Module auszuwählen. Der Webserver wird auch so funktionieren.

    Working magic...........................................done.

    # LoadModule vhost_alias_module /usr/lib/apache/1.3/mod_vhost_alias.so
    # LoadModule env_module /usr/lib/apache/1.3/mod_env.so
    LoadModule config_log_module /usr/lib/apache/1.3/mod_log_config.so
    LoadModule rewrite_module /usr/lib/apache/1.3/mod_rewrite.so
    # LoadModule mime_magic_module /usr/lib/apache/1.3/mod_mime_magic.so
    LoadModule mime_module /usr/lib/apache/1.3/mod_mime.so
    LoadModule negotiation_module /usr/lib/apache/1.3/mod_negotiation.so
    LoadModule status_module /usr/lib/apache/1.3/mod_status.so
    # LoadModule info_module /usr/lib/apache/1.3/mod_info.so
    # LoadModule includes_module /usr/lib/apache/1.3/mod_include.so
    LoadModule autoindex_module /usr/lib/apache/1.3/mod_autoindex.so
    LoadModule dir_module /usr/lib/apache/1.3/mod_dir.so
    LoadModule cgi_module /usr/lib/apache/1.3/mod_cgi.so
    # LoadModule asis_module /usr/lib/apache/1.3/mod_asis.so
    # LoadModule imap_module /usr/lib/apache/1.3/mod_imap.so
    # LoadModule action_module /usr/lib/apache/1.3/mod_actions.so
    # LoadModule speling_module /usr/lib/apache/1.3/mod_speling.so
    LoadModule userdir_module /usr/lib/apache/1.3/mod_userdir.so
    # LoadModule proxy_module /usr/lib/apache/1.3/libproxy.so
    LoadModule alias_module /usr/lib/apache/1.3/mod_alias.so
    LoadModule access_module /usr/lib/apache/1.3/mod_access.so
    LoadModule auth_module /usr/lib/apache/1.3/mod_auth.so
    # LoadModule anon_auth_module /usr/lib/apache/1.3/mod_auth_anon.so
    # LoadModule dbm_auth_module /usr/lib/apache/1.3/mod_auth_dbm.so
    # LoadModule db_auth_module /usr/lib/apache/1.3/mod_auth_db.so
    # LoadModule digest_module /usr/lib/apache/1.3/mod_digest.so
    # LoadModule cern_meta_module /usr/lib/apache/1.3/mod_cern_meta.so
    LoadModule expires_module /usr/lib/apache/1.3/mod_expires.so
    # LoadModule headers_module /usr/lib/apache/1.3/mod_headers.so
    # LoadModule usertrack_module /usr/lib/apache/1.3/mod_usertrack.so
    LoadModule unique_id_module /usr/lib/apache/1.3/mod_unique_id.so
    LoadModule setenvif_module /usr/lib/apache/1.3/mod_setenvif.so
    # LoadModule sys_auth_module /usr/lib/apache/1.3/mod_auth_sys.so
    # LoadModule put_module /usr/lib/apache/1.3/mod_put.so
    # LoadModule throttle_module /usr/lib/apache/1.3/mod_throttle.so
    # LoadModule auth_ldap_module /usr/lib/apache/1.3/auth_ldap.so
    # LoadModule allowdev_module /usr/lib/apache/1.3/mod_allowdev.so
    # LoadModule pgsql_auth_module /usr/lib/apache/1.3/mod_auth_pgsql.so
    # LoadModule cvs_module /usr/lib/apache/1.3/mod_cvs.so
    # LoadModule define_module /usr/lib/apache/1.3/mod_define.so
    # LoadModule eaccess_module /usr/lib/apache/1.3/mod_eaccess.so
    # LoadModule roaming_module /usr/lib/apache/1.3/mod_roaming.so

    Pondering...........................................done.

    Save these changes to the configuration files? [Y/n]

Das Konfigurationsprogramm wird die nötigen Dateien unter `/etc/apache/` speichern. Wie Sie sehen, sind viele Zeilen auskommentiert; hierzu dient das Zeichen `#` am Zeilenanfang. Wenn Sie später bestimmte Funktionen benötigen, entfernen Sie dieses Zeichen und starten den Server neu. Bei einigen Modulen sind weitere Eintragungen in der Konfiguration notwendig; ein paar Beispiele finden Sie weiter unten, die anderen werden in der Dokumentation zu Apache beschrieben.

    Rotated `/etc/apache/httpd.conf' at Sun Jan 23 19:25:42 CET 2000.
    Rotated `/etc/apache/srm.conf' at Sun Jan 23 19:25:42 CET 2000.
    Restart Apache now? [Y/n]
    Stopping apache with apachectl ...
    Waiting for apache to terminate ...done.
    /usr/sbin/apachectl start: httpd started

Der Webserver ist nun installiert, und Sie können diesen mit einem beliebigen Webbrowser unter der Adresse: http://localhost/ erreichen. Bei der Installation wurde eine Testseite eingerichtet; diese sollte Ihnen angezeigt werden. Die Dateien zu dieser Seite finden Sie unter `/var/www/`. Sie können dort nun eigene Seiten ablegen.

Wenn Sie sich näher mit dem Webserver Apache beschäftigen wollen, sollten Sie auch die Dokumentation installieren, die sich im Paket `apache-doc` befindet.

### 9.1.2 Konfigurationsdateien

Unter Debian GNU/Linux befinden sich die Konfigurationsdateien des Apache unter `/etc/apache/`.

Apache benutzt drei Konfigurationsdateien:

- `httpd.conf` - Informationen zum Verhalten des Servers

- `srm.conf` - Informationen zu den Dokumenttypen

- `access.conf` - Informationen zu den Zugriffen auf die Dokumente

Debian GNU/Linux benutzt während der Installation des Pakets das Programm `apacheconfig`, um diese Dateien (speziell `httpd.conf`) zu konfigurieren. Sie können `apacheconfig` zu jeder Zeit wieder aufrufen (als Superuser).

### 9.1.3 Logdateien

Apache protokolliert alle Aktionen in zwei Logdateien, die unter `/var/log/apache/` zu finden sind:

- `error_log` - Fehlermeldungen

- `access_log` - Hier werden alle übertragenen Dateien protokolliert.

### 9.1.4 Apache starten und stoppen

Sie können Apache als Superuser über das Skript `/etc/init.d/apache` starten, neu starten und stoppen.

    linux:/home/fr# /etc/init.d/apache
    Usage: /etc/init.d/apache {start|stop|reload|reload-modules|
       force-reload|restart}
    linux:/home/fr# /etc/init.d/apache restart
    Restarting apache daemon... done.

Wenn Sie Veränderungen an den Konfigurationsdateien vorgenommen haben, müssen Sie Apache neu starten. Wenn dieser Neustart misslingt, liegt ein Fehler in den Konfigurationsdateien vor.

### 9.1.5 CGI-Programme

CGI-(Common Gateway Interface)-Programme werden auf dem Webserver ausgeführt und liefern dynamische Daten als HTML-Datei an den Browser zurück. Im einfachsten Fall kann ein CGI-Programm ein einfaches Shell-Skript sein; Sie können aber auch in jeder anderen Programmiersprache Anwendungen erstellen. Sehr beliebt sind Datenbankanwendungen; als Skriptsprachen haben sich Perl und PHP durchgesetzt.

Wenn Sie ein CGI-Programm erstellt haben, so muss dieses in dem Verzeichnis `/usr/lib/cgi-bin/` liegen. Im Browser ist beispielsweise das Programm `test.sh` als http://localhost/cgi-bin/test.sh zu erreichen. Ein einfaches Beispiel für ein Programm `test.sh` wäre:

    #!/bin/sh

    # disable filename globbing
    set -f

    echo Content-type: text/plain
    echo

    echo CGI/1.0 test script report:
    echo

    echo argc is $#. argv is "$*".
    echo

    echo SERVER_SOFTWARE = $SERVER_SOFTWARE
    echo SERVER_NAME = $SERVER_NAME

Vergessen Sie nicht, das Skript ausführbar zu machen. Wenn Sie dieses Skript über die oben gezeigte URL aufrufen, erhalten Sie folgende Ausgabe in Ihrem Webbrowser:

    CGI/1.0 test script report:

    argc is 0. argv is .

    SERVER_SOFTWARE = Apache/1.3.12 (Unix) Debian/GNU
    SERVER_NAME = surimi

Sie können einem CGI-Programm auch Parameter übergeben; dies geschieht in der URL hinter einem Fragezeichen. Das Skript zählt die Anzahl der Parameter und gibt auch den übergebenen String aus. Wenn Sie die URL http://localhost/cgi-bin/test.sh?Linuxrules! benutzen, um das Skript aufzurufen, verändert sich die Ausgabe im Webbrowser in der zweiten Zeile wie folgt:

    argc is 1. argv is Linuxrules!.

### 9.1.6 Apache konfigurieren und optimieren

Der Apache Webserver verfügt über eine Vielzahl von Funktionen. Einige interessante Funktionen möchten wir Ihnen im Folgenden vorstellen.

#### 9.1.6.1 URL-Korrekturen

Der Webserver Apache kann URLs, die nicht auf dem Server vorhanden sind, in den meisten Fällen automatisch korrigieren. Es werden sowohl fehlende Buchstaben ergänzt als auch Groß- und Kleinschreibung geprüft und ggf. korrigiert. Hierzu werden alle Dateinamen auf dem Server geprüft und mit der URL verglichen. Wenn nur eine passende Datei gefunden wird, wird die URL korrigiert und die gefundene Datei angezeigt. Bei mehreren passenden Dateien wird eine Liste angezeigt.

Um diese Funktion zu aktivieren, müssen Sie das Kommentarzeichen (`#`) vor der Zeile: `# LoadModule speling_module /usr/lib/apache/1.3/mod_speling.so` in der Datei `/etc/apache/httpd.conf` entfernen und die Option „CheckSpellig“ aktivieren. Hier ein Ausschnitt aus der Datei:

    ...
    LoadModule speling_module /usr/lib/apache/1.3/mod_speling.so
    ...

    ...
    CheckSpelling on
    ...

Danach müssen Sie den Apache neu starten (mit `/etc/init.d/apache reload`).

#### 9.1.6.2 Geschützte Verzeichnisse

Wenn Sie Verzeichnisse auf Ihrem Webserver mit einem Passwort schützen wollen, so erzeugen Sie in dem gewünschten Verzeichnis die Datei `.htaccess`.

Diese sollte folgenden Inhalt haben:

    AuthUserFile /home/user007/www/.passwd
    AuthName "user007"
    AuthType Basic

    <Limit GET POST>
    require valid-user
    </Limit>

Nun benötigen Sie noch die Datei mit dem Passwort in verschlüsselter Form. Achten Sie darauf, dass diese Datei auf keinen Fall innerhalb der aus dem Netz zugänglichen Webseiten liegt! Erzeugen Sie die Datei `/home/user007/www/.passwd` mit folgendem Eintrag:

    user007:gfrzGZ98bsd8

Sie können ein verschlüsseltes Passwort mit dem Programm `mkpasswd` aus einem Klartext erzeugen.

Abschlissend muss in der Datei `httpd.conf`des Apache Servers die Option „AllowOverride None“ zu „AllowOverride AuthConfig“ verändert werden. Ein abschliessender Neustart des Servers (`/etc/init.d/apache restart`) aktiviert die Anpassungen an der Konfigurationsdatei.

#### 9.1.6.3 Server Side Includes (SSI)

Server Side Includes (SSI) erlauben es, Webseiten zu interpretieren, bevor diese zum Client (Browser) geschickt werden. Sie können über speziellen Code innerhalb der Seite Variablen benutzen oder einfach Entscheidungen (`if then` usw.) treffen und viele andere Parameter einstellen.

Um diese Funktionalität zu aktivieren, muss das Modul `mod_include` entweder mit einkompiliert sein, oder es muss beim Start des Servers geladen werden. Weiterhin müssen Seiten, die interpretiert werden sollen, die Endung `.shtml` bekommen, und Sie müssen dies in der Konfiguration aktivieren:

    AddType text/html .shtml
    AddHandler server-parsed .shtml

Die erste Zeile weist den `.shtml`-Dateien den Mime-Typ `text/html` zu, die zweite Zeile bestimmt, dass diese Dateien durch den Server interpretiert („geparst“) werden sollen.

Weiterhin müssen Sie diese Funktion noch explizit einschalten, und zwar mit der Zeile

    Options +Includes

in der Datei `/etc/apache/httpd.conf` oder in einer Datei `.htaccess` innerhalb des gewünschten Verzeichnisses Ihres Webservers (hierzu muss `AllowOverride` ebenfalls aktiviert sein).

Die zu interpretierenden Kommandos müssen innerhalb des HTML-Codes als SGML-Kommentare eingebettet werden. Die Syntax hierzu lautet:

    <!--#element attribute=value attribute=value ... -->

Die Werte („value“) werden meist in doppelten Anführungszeichen, seltener in einfachen Anführungszeichen, gefasst. Beachten Sie, dass der Abschluss dieser Zeile (`-->`) mit einem Leerzeichen beginnt!

Erlaubte Elemente sind unter anderem: „config“, „echo“, „exec“, „fsize“, „flastmod“, „printenv“, „set“ und „include“. Nähere Informationen zu diesen Elementen finden Sie in der Dokumentation. Auf das Element „include“ gehen wir nun etwas genauer ein.

Mit dem Element „include“ können Sie Text aus einer anderen Datei in die aktuelle Datei einfügen. Jede dieser so eingebundenen Dateien unterliegt den Zugriffsrechten des jeweiligen Verzeichnisses. Wenn Sie also für den betreffenden Bereich die Option „IncludesNoExec“ gesetzt haben, werden so eingebundene CGI-Skripte ignoriert. Wenn diese Option nicht angegeben ist, wird das CGI-Skript ausgeführt und das Ergebnis eingebunden.

Das Element „include“ benötigt noch weitere Attribute; diese definieren den Ort, an dem die einzubindende Datei zu finden ist:

`file` - Dieses Attribut gibt einen relativen Pfad zu der Datei an. Der Wert darf kein absoluter Pfad sein und darf keinen Verweis auf ein höher liegendes Verzeichnis (`../`) enthalten.

`virtual` - Hiermit wird eine komplette URL relativ zum aktuellen Dokument angegeben. Hier sind keine Rechnernamen (hostname) zugelassen. Wenn die URL nicht mit einem `/` beginnt, wird ein Pfad relativ zum aktuellen Dokument angenommen.

Weiterhin stehen Ihnen einige Variablen zur Verfügung, die Sie entweder direkt oder in Zusammenhang mit den Kommandos `echo` oder `if` und `elif` verwenden können:

DATE_GMT

  Die aktuelle Zeit als „Greenwich Mean Time“

DATE_LOCAL

  Die aktuelle Zeit in der eingestellten Zeitzone

DOCUMENT_NAME

  Der Dateiname des Dokuments ohne Pfadangabe

DOCUMENT_URI

  Die komplette URL des Dokuments; dies ist bei eingebundenen Dateien nicht die URL des aktuellen Dokuments.

LAST_MODIFIED

  Datum und Uhrzeit der letzten Änderung des Dokuments.

Hier nun ein kleines Beispiel für die Anwendung in der Praxis. Wenn Sie einen Webserver mit vielen Seiten pflegen müssen, sind Sie vielleicht schon mal in die Verlegenheit gekommen, das Layout verändern zu müssen. Nun ist es natürlich sehr aufwendig, dies in allen Dateien ändern zu müssen. Die Lösung hierfür ist nun, eine HTML-Datei zu erstellen, in der das Layout der Seite(n) bestimmt wird. Innerhalb des `BODY`-Tags erstellen Sie nun sinngemäß folgende Einträge:

        <!--#if expr="\"$DOCUMENT_URI\" = \"/foo/file.html\"" -->
        in foo
        <!--#elif expr="\"$DOCUMENT_URI\" = \"/bar/file.html\"" -->
        in bar
        <!--#else -->
        in neither
        <!--#endif -->

Dies bewirkt, dass - je nachdem, mit welcher URL die Datei aufgerufen wird - eine andere Datei in das `BODY`-Tag eingelesen wird. Sie müssen natürlich nicht die Hauptdatei entsprechend der Namen der anderen Dateien kopieren; passende Links reichen hier völlig aus. Natürlich können Sie die Liste der Dateien beliebig erweitern, dies soll nur ein kurzes Beispiel darstellen. Jede Veränderung des Aussehens der HTML-Seiten im Kopf der Datei wird nun sofort auf allen Seiten wirksam.

#### 9.1.6.4 Umleitungen

Manchmal ist es gewünscht, einzelne Webseiten oder gar komplette Server umzuleiten. Dies kann bei einem Providerwechsel nötig sein oder wenn Sie die Struktur Ihres Servers verändert haben.

Wenn Sie einen kompletten Server umleiten wollen, weil sich beispielsweise der Name geändert hat, dann aktivieren Sie das Modul `mod_alias` und ergänzen die Datei `/etc/apache/httpd.conf` um die Zeile:

    Redirect / http://www.debian.org/

Natürlich muss als Zieladresse der gewünschte Server (und nicht wie hier als Beispiel genannt http://www.debian.org) angegeben werden.

Dies führt aber nicht in allen Fällen zu dem gewünschten Ergebnis, zum Beispiel, wenn nicht auf die Hauptseite, sondern auf eine alte URL unterhalb der Hauptseite zugegriffen wird. Besser ist es, wenn Sie alle Zugriffe auf den Server abfangen und dem Client (Browser) eine neue URL „unterschieben“.

Hierzu benötigen Sie das Modul `mod_rewrite` und folgende Zeilen in der Konfiguration:

         RewriteEngine On
         RewriteRule /.* http://www.debian.org/ [R]

Dies bewirkt, dass alle Anfragen auf den Server umgeleitet werden.

#### 9.1.6.5 Fehlermeldungen

Sicher haben Sie in Ihrem Webbrowser schon einmal die Meldung gesehen, dass eine gesuchte Seite nicht mehr gefunden wurde ( „Error 404: Page Not Found“). Der Anbieter hat vielleicht seinen Server umstrukturiert, und die URL hat sich verändert. So etwas wird sicher auch auf Ihrem Server mal passieren. Sie können mit dem Webserver Apache diese Fehlermeldungen individuell gestalten oder auch dafür sorgen, dass in dem Fall, dass eine Seite nicht gefunden wird, der Client auf eine andere Seite geleitet wird.

Standardmäßig bekommen Sie eine Fehlermeldung, wenn eine Seite nicht gefunden wurde; dazu müssen Sie nichts konfigurieren.

Je nach Fehlernummer können Sie ein anderes Verhalten erzwingen. Neben der Fehlernummer müssen Sie noch eine URL angeben, die dem Client übermittelt werden soll. Diese URLs können mit einem `/` beginnen, wenn es sich um lokale URLs handelt, oder auf entfernte Server verweisen.

         ErrorDocument 500 http://foo.example.com/cgi-bin/tester
         ErrorDocument 404 /cgi-bin/bad_urls.pl
         ErrorDocument 401 /subscription_info.html
         ErrorDocument 403 "Sorry can't allow you access today"

Zurück |  | Weiter
8.2 TCP/IP | Zum Anfang | 9.2 FTP-Server

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).