Teil von SELFHTML aktuell Teil von Artikel Teil von Serverkonfiguration Teil von Die Apache-Konfigurationsdatei

Die Apache-Konfigurationsdatei:
Wie fängt man am besten an?

nach unten Wie fängt man am besten an?
nach unten Eine einzelne oder mehrere Konfigurationsdateien?
nach unten Ein Beispiel für eine individuelle Konfiguration

Wie fängt man am besten an?

Alles hängt davon ab, welche Aufgaben der Apache erfüllen soll. Unmittelbar nach seiner Installation ist noch keiner der weiter  Partner ansprechbar, und im DocumentRoot liegen lediglich, falls das entsprechende Paket mitinstalliert wurde, ein paar vorformulierte Indexseiten, die in verschiedenen Sprachen das Standarddokument anbieten. Das genügt selbstverständlich nicht. Man kann es sich sehr leicht machen, indem rasch noch PERL und PHP aktiviert werden und das vorformulierte DocumentRoot unverändert übernommen und lediglich mit eigenen Webdokumenten aufgefüllt wird. Ein solcher "Weg des geringsten Widerstandes" wäre möglich, wenn man es eilig hat und den Apache lediglich benutzen, aber nicht wirklich verstehen lernen möchte.

Der schwierigere, letzten Endes aber erfolgversprechende Weg besteht darin, völlig von vorn anzufangen und nichts von dem, was bereits funktioniert, unverändert zu übernehmen. Das erreicht man am einfachsten, indem die vorformulierte httpd.conf erst einmal als "Backup" umbenannt, unter anderem Dateinamen abgespeichert (damit sie, falls irgendetwas völlig danebengeht, reaktiviert und der Ausgangszustand wiederhergestellt werden kann) und an ihrer Stelle eine neue, individuelle und vorerst völlig leere httpd.conf angelegt wird. Und diese neue httpd.conf gilt es dann, Schritt für Schritt mit den tatsächlich benötigten Einträgen zu füllen. Es ist nicht ratsam, Apache-Bestandteile wie Modul- oder Bibliotheksdateien zu verschieben oder an anderen Dateien des Softwarepakets herumzuexperimentieren. Wenn überhaupt, erfolgen solche Schritte ganz zuletzt, sobald die gewünschte Apache-Konfiguration einigermaßen "steht".

Wenn gar keine httpd.conf existiert, startet der Apache nicht. Es gibt eine Fehlermeldung, die unter Windows so aussieht:

Apache nicht konfiguriert

Auf einer Linux-Maschine steht eine vergleichbare Fehlermeldung im syslog. Ist dagegen eine Konfigurationsdatei vorhanden (einige Distributionen nennen sie apache2.conf statt httpd.conf), so startet der Webserver, was sich mit einer Kontrolle der laufenden Prozesse ermitteln läßt. Dafür gibt es beispielweise den Konsolenbefehl fuser -v /. Auf einer Windows-Maschine könnte die Konfigurationsdatei bis auf die Angabe eines ports völlig leer sein, Linux verlangt mindestens die Angabe eines Benutzers und die Zuweisung eines ports:

Apache nicht konfiguriert

Daß der Apache tatsächlich gestartet ist, läßt sich mit fuser -v / bzw. mit dem Task-Manager prüfen. Allerdings bedeutet er in diesem "Embryonalzustand" lediglich eine Belastung des Arbeitsspeichers, da er ohne Konfiguration kaum in der Lage ist, Aufgaben zu erfüllen. Die Minimalanforderung für das, was ihm von der Konfigurationsdatei an Informationen übergeben werden muß, kann man der Windows-Fehlermeldung entnehmen: es wird die Angabe eines ports benötigt und ein DocumentRoot sollte (muß aber nicht zwingend) ebenfalls angegeben werden, damit der Apache weiß, aus welchem Verzeichnis er Anfragen bedienen soll. Linux-Installationen verlangen darüberhinaus die Angabe eines Benutzers. Windows braucht eine solche Angabe nicht. Die Meckerei wegen des fehlenden Servernamens kann man zunächst ignorieren. Eine minimale httpd.conf könnte also folgendermaßen aussehen:

# /etc/apache2/httpd.conf - minimal für SuSE Linux 9.1

User wwwrun
Listen 80
DocumentRoot "/srv/www/htdocs"

Oder auf einem Windows-Rechner:

# D:\Apache\conf\httpd.conf  -  minimal für Windows XP

Listen 80
DocumentRoot "D:/Apache/htdocs"

Übrigens, um das schnell noch zu sagen: "htdocs" bedeutet soviel wie "Hyper Text Documents".

Mit diesen drei bzw. zwei Einträgen kann der Apache bereits in einem lokalen Netz HTML-Dokumente aus dem angegebenen DocumentRoot allen eventuell anfragenden Browsern zur Verfügung stellen. Da kein Servername existiert, müßte die IP-Adresse in der Adreßzeile eines Browsers eingegeben werden, und weil es noch keine Festlegung für DirectoryIndex gibt, müßte auch der gewünschte Dateiname explizit angegeben werden, also beispielsweise http://192.168.0.2/index.htm. Das Standarddokument mit seiner bekannten Formel "Es klappt! ..." bekommt man mit dieser Minimalkonfiguration übrigens in Textform angezeigt, da der Apache noch keine MIME-Typen kennt. Der Internet Explorer zeigt sie allerdings an, weil er Text, der HTML-tags enthält, grundsätzlich als HTML behandelt.

Selbstverständlich ist ein solcher "Minimalzustand" völlig unzureichend und in seiner Wirkung sogar noch weniger befriedigend (und für das Betriebssystem auch belastender) als ein "default"-Zustand bei unverändert übernommener Konfigurationsdatei. Aber ausgehend von dieser Minimalkonfiguration kann man sich nun die vorhin glücklicherweise unter anderem Namen abgespeicherte "default"-Konfigurationsdatei einschließlich ihrer Kommentare wieder hervorkramen, zum Vergleich ansehen und Zeile für Zeile bzw. zurück Container für Container entscheiden, welche Anweisung und/oder welcher Container nun tatsächlich benötigt wird - und in welcher Form. Das ist ein längerer und etwas mühsamer Weg. Aber er bietet die Gewähr, daß bei eventuell auftretenden Fehlern sofort verständlich wird, woran es nun liegt und welche Zeile der Konfigurationsdatei wirklich überdacht und korrigiert werden muß.

Beginnen könnte man damit, erst einmal die Anweisungen aufzunehmen, die von core bereitgestellt und zwingend für den Serverbetrieb benötigt werden, dazu noch die Vorgaben für das Multiprozessing-Modul für das Feintuning. Das ergibt für einen Apache 2.0.x auf einer Linux-Maschine ungefähr folgende httpd.conf:

httpd.conf-Zeile Standardwert Bedeutung
ServerRoot "/srv/www" bezeichnet die Spitze des Verzeichnisbaums, unter dem die Server-Konfiguration, Fehleranzeigen und Protokolle gesucht werden, sofern dafür nicht ausdrücklich andere Pfade vorgegeben wurden
PidFile /var/run/httpd.pid ist die Datei, in der der Server jedesmal dann seine "process identification number" niederlegt, wenn er gestartet wird
Timeout 300 bestimmt die Anzahl Sekunden, ehe eine Unterbrechung gesendet wird
KeepAlive On legt fest, ob persistente Verbindungen (mehr als eine Anfrage pro Verbindung) zulässig sind
MaxKeepAliveRequests 100 Höchstzahl der während einer persistenten Verbindung zulässigen Anfragen. Wird hier 0 angegeben, ist unbegrenzter Zugriff möglich
KeepAliveTimeout 15 Zeitspanne (Zahl an Sekunden), um auf die nächste Abfrage desselben Clients mit derselben Verbindung zu warten
StartServers 5 Anzahl der Server-Prozesse, die zu Beginn des Server-Betriebs gestartet werden
MinSpareServers 5 Apache fragt periodisch ab, wieviele Serverprozesse gerade auf eine Rückmeldung warten. Wenn das weniger sind als in "MinSpareServers" vorgegeben, wird ein neuer erstellt. Sind das mehr als in "MaxSpareServers" vorgegeben, werden einige beendet (sie "sterben")
MaxSpareServers 10
MaxClients 150 Höchstzahl der parallel laufenden Serverprzesse
MaxRequestsPerChild 0 Höchstzahl an Anfragen, die jeder "Kind-Prozeß" behandeln darf, ehe er beendet wird
Listen 80 Angabe des Standard-Ports
User nobody Benutzername
Group #-1 Gruppenzugehörigkeit des Apache-Benutzers
ServerAdmin mail@adresse.de Anschrift des Server-Administrators
ServerName servername.tld DNS-Name des Servers
DefaultType text/plain Standard-MIME-Typ, den der Server einem Dokument zuweist, falls es nicht von einer Extension her genauer bestimmt wird
TypesConfig /etc/apache2/mime.types liest die Liste der bekannten MIME-Typen ein
ErrorLog /var/log/error_log Verzeichnis für Fehlerprotokolle
LogLevel warn Art und Menge der Eintragungen, die in der Protokolldatei abgelegt werden sollen
ServerTokens Full bestimmt, was der Server als Header-Information jeder HTTP-Anfrage mitgibt
ServerSignature On In serverseitig generierte Dokumente kann eine Zeile eingefügt werden, die die Server-Version, den virtuellen Hostnamen und andere Hinweise enthält
AddDefaultCharset ISO-8859-1 gibt eine Standard-Kodierung vor, die für alle ausgegebenen Seiten gilt
DocumentRoot "/srv/www/htdocs" Verzeichnis, in dem die zur Publikation vorgesehenen Dokumente liegen

Für diese Einträge werden noch keine Zusatzmodule benötigt. Es sind die Bestandteile des "global environment" und einige Vorgaben aus der "main server configuration". Der Serverbetrieb könnte mit diesen Einstellungen bereits aufgenommen werden und zuverlässig funktionieren. Aber es gibt noch keinerlei Zugriffsbestimmungen, Scripts können noch nicht ausgeführt werden, es gibt gravierende Sicherheitslöcher und auch sonst noch allerhand Mängel. Die ursprünglichen Kommentare wurden völlig weggelassen, können aber nach Belieben neu gefaßt oder wieder hineinkopiert werden.

nach obennach unten

Eine einzelne oder mehrere Konfigurationsdateien?

Die Konfigurationsdatei wirkt aufgrund ihrer Größe (woran auch die durchaus wertvollen Kommentare beteiligt sind) anfangs sehr unübersichtlich und auch ein wenig verwirrend. Die Frage, ob man sie nicht in mehrere kleinere Teile zerlegen könnte, die sich dann etwas leichter administrieren lassen, ist berechtigt. Schließlich gibt es die Möglichkeit, mit Include externe Dateien in die Konfigurationsdatei einzubinden (ein Beispiel dafür gibt es von Anfang an mit dem Aufruf von mime.magic). Zumindest eine Auftrennung entsprechend den drei Hauptabschnitten der httpd.conf (global environment, main server configuration, virtual hosts) bietet sich schließlich an.

Tatsächlich ist das eine sogar sehr gute Idee. Der Programmdatei httpd bzw. apache.exe ist es egal, wie ihr die benötigten Informationen bekanntgegeben werden, wichtig ist, daß sie diese Informationen erhält. So ist es beispielsweise möglich, daß die httpd.conf gar nichts anderes als einige Include-Anweisungen enthält und vielleicht ein paar erläuternde Kommentare - auf diese Art verfährt SuSE Linux 9.1 bereits seit Apache 2.0.48. Die "ausgelagerten" Anweisungen müssen nicht einmal unbedingt in Dateien mit dem Namen *.conf abgelegt werden, der Dateiname ist unwichtig. Als Konvention kann dennoch gelten, daß man beispielsweise die Konfiguration virtueller hosts in einer Datei virthost.conf zusammenfaßt. Darüber hinaus bietet es sich an, die Modulliste in eine Datei module.conf auszulagern sowie die relativ langen Listen, die zu mod_mime gehören, in eine mime.conf. Es macht Sinn, die Anweisungen in Dateien auszulagern, deren Dateinamen dem zugehörigen Modul entsprechen und in der httpd.conf selbst nur noch die core-Anweisungen stehenzulassen. Die Variationsmöglichkeiten sind nahezu unendlich. Wichtig ist lediglich, daß dem Administrator seine Arbeit tatsächlich erleichtert und nicht etwa die Übersicht erschwert wird.

nach obennach unten

Ein Beispiel für eine individuelle Konfiguration

Da sonst in diesem Artikel immer die Linux-Varianten an erster Stelle stehen, soll es hier ausnahmsweise einmal mit einem Windows-Beispiel versucht werden. Es ist ja nur ein Beispiel. Zwar ist es, wie alle in diesem Artikel genannten Beispiele, ausgiebig auf Zuverlässigkeit und Nachvollziehbarkeit getetet worden, aber das nimmt ihm den Beispielcharakter nicht. Von einem Leser dieses Artikels wird erwartet, daß er den SELF-Gedanken kennt und so weit verinnerlicht hat, daß kein Beispiel ungeprüft übernommen oder gar per Copy&Paste ins eigene System übertragen werden darf. Beispiele dienen dazu, das zugrundeliegende Prinzip zu verdeutlichen, mehr können und sollen sie nicht leisten.

Es soll ein Apache 2.0.50 mit Hilfe des MSI-Installationspakets auf WindowsXP im Programmverzeichnis D:\Apache installiert und so konfiguriert werden, daß mit seiner Hilfe sowohl PHP-Scripts wie auch CGI-Scripts (PERL) ausgeführt werden können und es sollen auch SSI zulässig sein. .htaccess wird nicht benötigt und kein virtueller Host eingerichtet. Dann sieht die httpd.conf in Anlehnung an das oben dargestellte Linux-Beispiel erst einmal ungefähr so aus:

# httpd.conf für Apache 2.0.50
# Einsatzplattform Windows

ServerRoot "D:/Apache"
PidFile logs/httpd.pid
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15

ThreadsPerChild 250
MaxRequestsPerChild  0

Listen  80

Include "D:/Apache/conf/module.conf"

ServerAdmin  mail@adresse.de
ServerName  Rechnername
DefaultType  text/plain
ErrorLog logs/error.log
LogLevel  warn
LogFormat  "%h %l %u %t \"%r\" %>s %b" common
CustomLog  logs/access.log common

ServerTokens  Full
ServerSignature  On
AddDefaultCharset  ISO-8859-1

DocumentRoot "D:/www/server1"
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory "D:/www/server1">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    AddOutputFilter INCLUDES .shtml .shtm
</Directory>

DirectoryIndex index.htm index.html index.shtml index.shtm index.cgi index.php

ScriptAlias /cgi-bin/ "D:/www/server1/cgi-bin/"
<Directory "I:/cgi-bin">
    AllowOverride None
    Options Indexes FollowSymLinks ExecCGI
    Order allow,deny
    Allow from all
</Directory>

ScriptAlias /php/ "D:/php/"

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 192.168
</Location>
<Location /server-info>
    SetHandler server-info
    Order deny,allow
    Deny from all
    Allow from 192.168
</Location>

Include "D:/Apache/conf/mime.conf"
Include "D:/Apache/conf/autoindex.conf"

Erläuterungen zur Bedeutung bzw. Wirkung der einzelnen Anweisungen können im weiter übersetzten Beispiel einer "default"-Konfigurationsdatei nachgelesen werden, Hinzugekommen sind hier gegenüber dem oben angeführten Linux-Beispiel die Formatierung für das Zugriffsprotokoll, Zugriffsbestimmungen und Optionen für das DocumentRoot, ein DirectoryIndex, die ScriptAliase für PERL und PHP sowie zwei "Location"-Container, die vielleicht für den laufenden Serverbetrieb nicht zwingend benötigt werden, aber während der Konfigurationsarbeit nützliche Zusatzinformationen an den Browser liefern können. Für diese neuen Einträge sowie für einige weitere, noch nicht formulierte, wird die Modulliste benötigt, die in eine Datei module.conf ausgelagert werden soll. Wie weiter vorn bereits angesprochen, wird rund ein Dutzend Module benötigt.

# Include-Datei module.conf

LoadModule access_module        modules/mod_access.so
LoadModule actions_module       modules/mod_actions.so
LoadModule autoindex_module     modules/mod_autoindex.so
LoadModule alias_module         modules/mod_alias.so
LoadModule cgi_module           modules/mod_cgi.so
LoadModule dir_module           modules/mod_dir.so
LoadModule include_module       modules/mod_include.so
LoadModule info_module          modules/mod_info.so
LoadModule log_config_module    modules/mod_log_config.so
LoadModule mime_module          modules/mod_mime.so
LoadModule negotiation_module   modules/mod_negotiation.so
LoadModule status_module        modules/mod_status.so

Damit der Einsatz von Scripts und SSI möglich wird, müssen einige der von mod_mime bereitgestellten Anweisungen ausgeführt werden können, was beispielsweise von einer Datei mime.conf aus geschehen kann.

# Include-Datei mime.conf

TypesConfig conf/mime.types
MIMEMagicFile conf/magic
DefaultLanguage de
AddLanguage de .de
AddCharset ISO-8859-1  .iso8859-1  .latin1
AddType text/html .shtml .shtm
AddType application/x-httpd-php .php
AddHandler cgi-script .cgi .pl .exe .bat
Action application/x-httpd-php "/php/php.exe"
AddOutputFilter INCLUDES .shtml .shtm

Und wenn nun schon mod_autoindex in der Modulliste enthalten ist, soll es auch noch eine autoindex.conf geben, damit Verzeichnisinhalte von Ordnern, in denen keine Index-Datei liegt, im anfragenden Browser dargestellt werden können.

# Include-Datei autoindex.conf

IndexOptions FancyIndexing VersionSort
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

DefaultIcon /icons/unknown.gif

ReadmeName README.htm
HeaderName HEADER.htm
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

Das ist bereits alles. Ein derart konfigurierter lokaler Apache erfüllt alle Anforderungen, die in den meisten Fällen an eine einfache Testumgebung auf einem Windows-Rechner gestellt werden. Die ursprüngliche httpd.conf besteht jetzt aus vier kleineren Konfigurationsdateien, die deutlich übersichtlicher gehalten werden können als eine einzige sehr große Konfigurationsdatei. Sie enthalten in dieser Fassung auch keinerlei überflüssige Einträge, die vielleicht niemals während des Serverbetriebs in Anspruch genommen würden. Da im Verzeichnis D:\Apache\conf auch noch zum Vergleich eine Datei httpd.conf.default liegt, läßt sich jederzeit prüfen, ob nicht vielleicht doch noch der eine oder andere Eintrag oder ein weiteres Modul benötigt wird.

Und wenn man sie unbedingt braucht, können selbstverständlich beliebige individuelle Kommentare in diese httpd.conf aufgenommen werden ;-)

weiter Seite Deutschsprachige (übersetzte) "default"-Konfigurationsdateien

zurück Seite Der Umgang mit den Modulen

Teil von SELFHTML aktuell Teil von Artikel Teil von Serverkonfiguration Teil von Die Apache-Konfigurationsdatei

© 2007 bereichsübergreifende Seite Impressum, für diese Seite: E-Mail christoph.schnauss@berlin.de