Zum Inhalt springen

Apache/06 Grundkonfiguration/3 Allgemeine Direktiven: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „ “ durch „ “
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Apache2.4/06 Grundkonfiguration/3 Allgemeine Direktiven''' - Allgemeine Konfigurationsdirektiven
'''Apache/06 Grundkonfiguration/3 Allgemeine Direktiven''' - Allgemeine Konfigurationsdirektiven


== Beschreibung ==
== Beschreibung ==
Zeile 6: Zeile 6:
* in MPM-Modulen und in solchen Modulen verfügbar sind, die standardmäßig zu Apache gehören und aktiviert sind
* in MPM-Modulen und in solchen Modulen verfügbar sind, die standardmäßig zu Apache gehören und aktiviert sind


== Hauptserver ==
Der zweite Abschnitt der Konfigurationsdatei httpd.conf ist wie erwähnt für die Einstellungen der Standard-Website zuständig, die der Server veröffentlicht
* Hier befinden sich also beispielsweise die DocumentRoot (das Basisverzeichnis) der Site sowie sämtliche Zugriffs- und Authentifizierungseinstellungen
* In der offiziellen Vorlage der httpd.conf hieß es früher über diesen Abschnitt
### Section 2: 'Main' server configuration
#
# The directives in this section set up the values used by the
# 'main' server, which responds to any requests that aren't
# handled by a <VirtualHost> definition
* These values also
# provide defaults for any <VirtualHost> containers you may
# define later in the file
Der »Hauptserver« behandelt nach dieser Beschreibung sämtliche Anfragen, für die kein spezieller virtueller Host konfiguriert ist
* Außerdem werden alle hier vorgenommenen Grundeinstellungen zunächst von jedem virtuellen Host übernommen, sofern sie in dessen Konfiguration nicht überschrieben werden
* Umgekehrt gilt natürlich, dass viele der hier vorgestellten Direktiven für einzelne virtuelle Hosts überschrieben werden können und oft sogar sollten
ServerAdmin E-Mail-Adresse des Server-Administrators für automatisch generierte Fehlermeldungsseiten
Modul core Kontext Server, <VirtualHost>
Syntax ServerAdmin E-Mail-Adresse Standardwert nicht gesetzt
Wenn Apache bei der Beantwortung von Anfragen auf Probleme stößt, erzeugt er angepasste Fehlermeldungsseiten (festgelegt durch die Direktive ErrorDocument)
Auf Wunsch kann eine solche Seite einen Link auf Ihre E-Mail-Adresse enthalten, damit Benutzer der Website Ihnen Probleme mitteilen können
* Die Direktive ServerAdmin legt diese Adresse fest
* Beispiel
ServerAdmin webmaster@mynet.de
ServerName Hostname und TCP-Port des Servers
Seit Version 2.0 (früher Port)
Modul core Kontext Server, <VirtualHost>
Syntax ServerName voll.qualifizierter.domain.name [:Port]
Standardwert nicht gesetzt
Mithilfe dieser Direktive wird der Domain-Name des Servers angegeben, optional gefolgt von einer TCP-Portnummer
* Die Konfigurationsanweisung bestimmt nicht etwa, wie Listen, auf welche Anfragen Apache überhaupt reagiert
* Sie legt den Server-Namen auch nicht nach außen fest – das funktioniert im Internet nur
über DNS
* Der hier angegebene Name dient vielmehr der Selbstidentifikation des Servers
* Ob er auch für selbst referenzierte URLs benutzt wird, regelt die Direktive UseCanonicalName
Es ist auf jeden Fall wichtig, dass der festgelegte Name auf irgendeine Weise in eine IP-Adresse aufgelöst werden kann: bei einem öffentlich zugänglichen Produktionsserver natürlich über DNS; bei einem neu eingerichteten Server, den Sie testen möchten, können Sie den Namen dagegen in Ihre hosts-Datei eintragen
(siehe Kapitel 5, »Apache in Betrieb nehmen«)
* Hier ein Beispiel
ServerName www.mynet.de:80
UseCanonicalName Legt fest, woher der Server seinen eigenen Hostnamen für selbst referenzierte URLs erhält
Modul core Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>
Syntax UseCanonicalName On|Off|DNS Standardwert Off (bis 2.0 On)
Bei Weiterleitungen, automatisch generierten Fehlermeldungsseiten und ähnlichen Gelegenheiten muss Apache selbst referenzierte URLs erzeugen, also absolute URLs, die wieder auf den Server-Host selbst zeigen
* Diese Direktive bestimmt, wie der Host- beziehungsweise Domain-Name für diese URLs bestimmt wird
* Es gibt drei mögliche Werte
* On: Apache verwendet den Hostnamen und den Port, der mithilfe der Direktive ServerName festgelegt wurde
* Off: Es werden der Hostname und der Port benutzt, die der Client in der Anfrage übermittelt hat
* DNS: Der Hostname wird durch einen Reverse-DNS-Lookup ermittelt, das heißt, er erfragt über das Domain Name System den Hostnamen zur IPAdresse
In der Regel ist die Einstellung On in Ordnung
* Der Default-Wert wurde in Version 2.2 jedoch umgestellt, da On manchmal Probleme mit schlecht geschriebenen CGI-Skripten oder Webanwendungen bereitet, die für selbst referenzierte URLs nicht die Umgebungsvariable SERVER_NAME verwenden
* Darüber hinaus kann Off nützlich sein, wenn die Clients im Intranet über einen anderen Hostnamen auf den Server zugreifen als diejenigen im Internet (z.B
* www statt www.mynet.de), da die Intranet-Clients bei Weiterleitungen und ähnlichen Vor
gängen sonst auf den externen Domain-Namen www.mynet.de umgeleitet würden
* DNS sorgt für Kompatibilität mit HTTP/1.0-Clients, die keinen Host-Header senden, und sollte eigentlich nur beim Einsatz IP-basierter virtueller Hosts verwendet werden, zumal der Reverse Lookup für Performance-Nachteile sorgt
UseCanonicalPhysicalPort Legt fest, woher der Server die Portnummer für selbst referenzierte URLs erhält
Seit Version 2.2
Modul core Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>
Syntax UseCanonicalPhysicalPort On|Off Standardwert Off
Wenn Sie diese Direktive auf On setzen, wird bei der Erzeugung selbst referenzierter URLs der tatsächliche, physische TCP-Port der Anfrage gewürdigt
* Die genaue Reihenfolge zur Ermittlung des Ports hängt auch von der Einstellung der Direktive UseCanonicalName ab
* Hat diese den Wert On, dann versucht Apache, den Port in folgender Reihenfolge zu bestimmen
1
* Port aus dem Wert von ServerName
2
* Physischer Port
3
* Standardport
Hat UseCanonicalName dagegen einen der Werte Off oder DNS, wird folgende Reihenfolge verwendet
1
* Port aus dem Host-Header
2
* Physischer Port
3
* Port aus dem Wert von ServerName
4
* Standardport
Bei UseCanonicalPhysicalPort Off wird der physische Port nicht berücksichtigt;
ansonsten bleibt die Reihenfolge je nach Einstellung für UseCanonicalName gleich
ServerTokens Ausführlichkeit der Versionsangabe für den HTTP-Antwort-Header Server
Modul core Kontext Server
Syntax ServerTokens Major | Minor | Min[imal] | Prod[uctOnly] | OS | Full Standardwert Full
Diese Direktive legt fest, wie ausführlich der Apache-Webserver seine Versionsinformationen im HTTP-Antwort-Header Server und in der durch ServerSignature definierten Fußzeile automatisch generierter Dokumente angibt
* Folgende Werte sind dafür definiert
* Prod oder ProductOnly: Es wird nur der Programmname ausgegeben: Apache
* Major: Die Hauptversionsnummer wird angegeben, z.B
* Apache/2
* Minor: Haupt- und Unterversionsnummer werden kombiniert, z.B
* Apache/2.2
* Min oder Minimal
* Es werden Hauptversions-, Unterversions- und Releasenummer angegeben
* Beispiel: Apache/2.2.10
* OS: Die vollständige Versionsnummer wie bei Minimal wird angegeben, zusätzlich steht in Klammern die Systemplattform
* Beispiel
Apache/2.2.21 (UNIX)
* Full: Zusätzlich zur vollen Versionsnummer und zum Betriebssystem werden die Versionsdaten wichtiger Zusatzmodule angezeigt
* Beispiel
Apache/2.2.21 (UNIX) mod_perl/2.0.4 Perl/v5.10.0 PHP/5.3.8
In den meisten Fällen sollten Sie sich für Minimal oder OS entscheiden
* Full verrät womöglich zu viele Details über die Server-Konfiguration
Falls Sie sich allerdings Hoffnungen machen, durch die Veröffentlichung von weniger Informationen (im Extremfall ProductOnly) Angriffe auf Ihren Webserver abzuwehren, handelt es sich um einen Fall von »Security by Obscurity«: Durch Verschleierung der Softwareinfrastruktur soll Crackern die Arbeit erschwert werden
* Dies beeindruckt allerdings höchstens ein paar automatisierte Angriffs-Tools, die von Anfängern verwendet werden
Aus diesem Grund wird auch keine Direktive angeboten, die eine grundlegende Änderung der Server-Informationen ermöglicht
* Wenn Sie möchten, dass Ihr Server sich unter falschem Namen meldet, müssen Sie die entsprechenden Daten vor der Kompilierung im Quellcode ändern
* Die Definitionen befinden sich am Ende der Datei ap_release.h im Verzeichnis include der Source-Distribution und lauten in der aktuellen Version folgendermaßen
#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
#define AP_SERVER_BASEPRODUCT "Apache"
#define AP_SERVER_MAJORVERSION "2"
#define AP_SERVER_MINORVERSION "2"
#define AP_SERVER_PATCHLEVEL "9"
Die Werte lassen sich natürlich beliebig ändern
* Beispiel
#define AP_SERVER_BASEVENDOR "Sirius Cybernetics Corp."
#define AP_SERVER_BASEPRODUCT "The Hitchhiker's Web Server"
#define AP_SERVER_MAJORVERSION "3"
#define AP_SERVER_MINORVERSION "1"
#define AP_SERVER_PATCHLEVEL "42"
Wenn Sie Apache anschließend gemäß den Anweisungen aus Kapitel 4, »Apache kompilieren und installieren«, kompilieren, meldet er sich als The Hitchhiker's Web Server/3.1.42
ServerSignature Fußzeile automatisch generierter Server-Dokumente
Modul core Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (All)
Syntax ServerSignature On|Off|Email Standardwert Off
Diese Direktive legt fest, ob Apache in automatisch generierte Dokumente wie Index- oder Fehlermeldungsseiten eine Fußzeile einfügen soll, die Informationen über die Server-Software, den Hostnamen und eventuell die E-Mail-Adresse des Administrators enthält
* Es gibt drei mögliche Werte
* Off: Apache erzeugt keine Informationsfußzeile
* On: Es wird eine Fußzeile ohne E-Mail-Adresse generiert
* Beispiel
Apache/2.2.10 (UNIX) Server at www.mynet.de Port 80
* EMail: Die Fußzeile sieht genauso aus wie bei On, allerdings ist der Hostname gleichzeitig ein Hyperlink auf die unter ServerAdmin angegebene E-MailAdresse
Der Hostname wird gemäß der Direktive UseCanonicalName angegeben
* Seit Apache 2.0.44 bestimmt ServerTokens, wie ausführlich die Information über den Server ausfällt
DocumentRoot Stammverzeichnis der Website
Modul core Kontext Server, <VirtualHost>
Syntax DocumentRoot Verzeichnis Standardwert variiert je nach Layout
Dies ist die wichtigste Konfigurationsanweisung für die Website des Hauptservers oder eines virtuellen Hosts: Sie legt das Basisverzeichnis fest, aus dem Apache die angeforderten Dokumente ausliefert
* Das bedeutet, dass Pfadangaben aus der URL der Client-Anfrage an dieses Verzeichnis angehängt werden, um die gewünschte Ressource zu ermitteln
* Angenommen, Sie haben DocumentRoot auf
/usr/local/share/apache2/htdocs gesetzt (Standard beim GNU-Installationslayout;
siehe Kapitel 4, »Apache kompilieren und installieren«)
* Wenn ein Client nun beispielsweise die URL http://www.mynet.de/info/news.html anfordert, liefert der Server die Datei /usr/local/share/apache2/htdocs/info/news.html aus – oder eine Fehlermeldung, falls das Dokument an der angegebenen Stelle nicht existiert
Beispiel
DocumentRoot /usr/share/web
Mithilfe von Direktiven wie Alias oder UserDir (siehe Kapitel 8, »Weiterleitungen und Indizes«) können Sie übrigens auch solche Dateien und Verzeichnisse im Bereich der Website abbilden, die sich eigentlich außerhalb der DocumentRoot befinden
DirectoryIndex Name der Indexseite
Modul mod_dir Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (Indexes)
Syntax DirectoryIndex lokale_URL [lokale_URL ...]
Standardwert index.html
Dies ist eine der beiden Direktiven, die das Standardmodul mod_dir zur Verfügung stellt
* Sie definiert die Namen von Dokumenten, die Apache automatisch ausliefert, wenn anstelle einer Datei ein Verzeichnis angefordert wurde
* Dies ist erforderlich, damit Benutzer einfach eine Website wie http://www.mynet.de/
anfordern können, anstatt den Namen der gewünschten Datei selbst anzugeben
Wenn Sie hier mehrere Dateien angeben, sucht Apache in der angegebenen Reihenfolge nach ihnen und liefert die erste aus, die er findet
* Beispiel
DirectoryIndex index.html index.html.var index.php
Ist eine Datei mit dem Namen index.html vorhanden, dann wird diese an den Client geliefert
* Bei der Angabe index.html.var handelt es sich um eine TypeMap
(siehe Kapitel 7, »Header und MIME-Einstellungen«) – je nach Sprach- oder Zeichensatzpräferenz des Clients können auf diese Weise unterschiedliche Dateien serviert werden
* Der Eintrag index.php ist interessant, wenn Sie mit PHP (siehe Kapitel 15, »Technologien zur Webprogrammierung«) arbeiten – auf diese Weise können auch PHP-Skripte als Indexdateien dienen
Selbstverständlich braucht der Name vor der Dateiendung nicht unbedingt index zu lauten – wenn Sie z.B
* von Microsoft Internet Information Services auf Apache umgestiegen sind, möchten Sie vielleicht lieber den bei Microsoft üblichen Dateinamen default.html weiterverwenden, um Ihre alte Website mit möglichst wenigen Änderungen zu übernehmen
Übrigens können Sie in der Liste auch einen absoluten URL-Pfad angeben
* Dieser sollte natürlich den letzten Eintrag bilden, damit die entsprechende Datei immer dann ausgeliefert wird, wenn das aktuelle Verzeichnis keine eigene Indexdatei enthält
* Das folgende Beispiel weist Apache an, die Datei index.html im angeforderten Verzeichnis an die Clients zu liefern oder aber die Datei defaultindex.html in der DocumentRoot, falls index.html nicht existiert
DirectoryIndex index.html /defaultindex.html
Auf Wunsch kann Apache auch automatisch einen Verzeichnisindex generieren –
diese Funktion wird vom Modul mod_autoindex bereitgestellt, das in Kapitel 8, »Weiterleitungen und Indizes«, ausführlich beschrieben wird
mod_dir und Verzeichnisanfragen
* Neben der Definition der Indexseite hat das Modul mod_dir übrigens auch noch die wichtige Aufgabe, Anfragen umzuleiten, die ein Verzeichnis betreffen
* Wenn eine Anfrage mit einer URL ohne abschließenden Slash eintrifft, behandelt Apache diese normalerweise nicht als Anforderung eines Verzeichnisses
* Angenommen, ein Client fordert die Ressource /test an
* Der Server sucht daraufhin in der DocumentRoot nach einer Datei mit diesem Namen
* Falls aber keine Datei, sondern nur ein Verzeichnis mit diesem Namen vorhanden ist, geht es unterschiedlich weiter: Wenn mod_dir nicht aktiv ist, erhält der Client einfach die Fehlermeldung »404 Not Found«
* Ist mod_dir dagegen geladen, wird eine Weiterleitung (301 Moved Permanently) gesendet, die einen Location-Header mit der kompletten URL einschließlich des Slashs enthält, in diesem Fall also z.B
http:// www.mynet.de/test/ (der Hostname wird gemäß der bereits beschriebenen Direktive UseCanonicalName gebildet)
* So gut wie alle Browser folgen dieser Weiterleitung automatisch
Wenn ein Client ein Verzeichnis mit abschließendem Slash anfordert, beispielsweise
/test/, wird natürlich sofort dessen Index geliefert
DirectorySlash Weiterleitung bei fehlendem Abschluss-Slash ein-/ausschalten
Seit Version 2.0.51
Modul mod_dir Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (Indexes)
Syntax DirectorySlash On|Off Standardwert On
Diese Direktive erlaubt es Ihnen in Ausnahmefällen, die unter »mod_dir und Verzeichnisanfragen« soeben beschriebene Weiterleitung bei fehlendem Slash zu deaktivieren
* Dazu müssen Sie im entsprechenden Kontext folgende Direktive setzen
DirectorySlash Off
Da die URL ohne abschließenden Slash nun nicht mehr auf Inhalte verweist, könnte es sinnvoll sein, für diesen Kontext einen speziellen Handler zu setzen, der sich um die Beantwortung solcher Anfragen kümmert (siehe Kapitel 7, »Header und MIME-Einstellungen«)
AccessFileName Name der ausgelagerten Verzeichniskonfigurationsdatei
Modul core Kontext Server, <VirtualHost>
Syntax AccessFileName Dateiname Standardwert .htaccess
Mithilfe dieser Direktive können Sie den Namen einer Datei angeben, die innerhalb eines Verzeichnisses der DocumentRoot zum Überschreiben von Konfigurationsdirektiven dient
* Standardmäßig ist der Name dieser Datei .htaccess, und es gibt im Allgemeinen keinen Grund, dies zu ändern.3 Erlaubt ist jeder beliebige Dateiname – er sollte aber zumindest mit einem Punkt beginnen, um wenigstens einen geringfügigen Schutz zu gewährleisten
* Beispiel
AccessFileName .override
3 Wieder einmal ein Fall von »Security by Obscurity«, der allenfalls vor Skript-Kiddies schützt
Vergessen Sie nicht, die Auslieferung von Dateien mit dem gewählten Namen an Clients generell zu deaktivieren
<Files .override>
Order Deny,Allow Deny from all
</Files>
== Verzeichniseinstellungen ==
; Wichtige Verzeichniseinstellungen Auch die Konfigurationsanweisungen, die in diesem Abschnitt besprochen werden, gehören zur zweiten Abteilung der Datei httpd.conf
* Der Unterschied besteht darin, dass sie üblicherweise innerhalb von <Directory>-Containern stehen, um die Einstellungen für die DocumentRoot und ihre Unterverzeichnisse sowie für einige andere Verzeichnisse festzulegen
Hier werden zunächst alle entsprechenden Direktiven behandelt; im Anschluss daran finden Sie einige Beispiele für übliche Verzeichniskonfigurationen
Options Verzeichnisoptionen
Modul core
Kontext Server, <VirtualHost>, <Directory>, <Location>, <Files>, .htaccess (Options)
Syntax Options All|[+|-]Option [[+|-]Option ...]
Standardwert All
Die Direktive Options legt fest, welche besonderen Eigenschaften ein bestimmtes Verzeichnis (mitsamt seinen Unterverzeichnissen) besitzen soll
* Das nähere Verhalten einiger dieser Optionen wird durch andere Direktiven geregelt; hier geht es zunächst einmal darum, ob eine bestimmte Eigenschaft grundsätzlich unterstützt werden soll oder nicht
* Im Einzelnen sind folgende Optionen definiert, die Sie als Werte der Direktive angeben können
* None: Schaltet sämtliche Optionen ab
* Indexes: Wenn die angeforderte URL ein Verzeichnis ist, wird die mittels DirectoryIndex festgelegte Indexdatei ausgeliefert oder – falls diese nicht vorhanden ist – ein durch mod_autoindex generierter Index
* FollowSymLinks: Symbolische Links innerhalb des Verzeichnisses werden aufgelöst – Apache liefert das entsprechende Ziel des Links aus
* SymLinksIfOwnerMatch: Symbolische Links werden nur dann verfolgt, wenn der Eigentümer des SymLinks demjenigen der Zieldatei entspricht
* ExecCGI: Innerhalb des Verzeichnisses soll die Ausführung von CGI-Skripten gestattet sein: Dateien mit bestimmten Endungen oder MIME-Types werden von Apache als ausführbare Skripte betrachtet; ihre Ausgabe wird als dynamisch erzeugtes Dokument an den Client ausgeliefert
* Es ist erheblich sicherer, über die Direktive ScriptAlias separate CGI-Verzeichnisse einzurichten und diese Option für Verzeichnisse innerhalb der DocumentRoot zu deaktivieren
* Näheres zur CGI-Konfiguration erfahren Sie in Kapitel 14, »CGI«
* Includes: Server Side Includes (siehe Kapitel 16, »SSI und Filter«) sind in diesem Verzeichnis gestattet
* IncludesNOEXEC: Auch in einem Verzeichnis mit dieser Option sind SSI grundsätzlich erlaubt, allerdings mit Ausnahme von #exec (Programmausführung)
und #exec cgi (CGI-Ausführung)
* MultiViews: Aktiviert die Auslieferung alternativer Dokumente für unterschiedliche Sprach-, Zeichensatz- oder Dateityp-Präferenzen eines Clients durch mod_negotiation
* Näheres dazu finden Sie in Kapitel 7, »Header und MIME-Einstellungen«
* All: Alle genannten Optionen außer MultiViews
* Wenn Options für ein Verzeichnis nicht angegeben wird, ist dies der Standardwert
Wenn Sie Optionen für mehrere ineinander verschachtelte Verzeichnisse festlegen, gelten für ein gegebenes Verzeichnis jeweils die speziellsten (für das am weitesten untergeordnete Verzeichnis angegebenen) Werte
* Näheres zur Reihenfolge der Abarbeitung unterschiedlicher Container erfahren Sie in Abschnitt 6.2, »Kontexte und Container«
* Das folgende Beispiel illustriert ein Missverständnis, das in diesem Zusammenhang auftreten kann
<Directory /usr/share/web>
Options FollowSymLinks Indexes IncludesNOEXEC
# ..
* weitere Einstellungen für /usr/share/web
</Directory>
<Directory /usr/share/web/test>
Options Includes
# ..
* weitere Einstellungen für /usr/share/web/test
</Directory>
Im Verzeichnis /usr/share/web sind die Optionen FollowSymLinks, Indexes und IncludesNOEXEC aktiviert
* Im Unterverzeichnis /usr/share/web/test gilt dagegen nur die Option Includes – das ist wahrscheinlich nicht das gewünschte Verhal
ten
* Um Includes hinzuzufügen, anstatt die anderen Optionen durch Includes zu ersetzen, müssten Sie für /usr/share/web/test diese Variante angeben
<Directory /usr/share/web/test>
Options FollowSymLinks Indexes Includes
# ..
* weitere Einstellungen für /usr/share/web/test
</Directory>
Natürlich können Sie die im übergeordneten Verzeichnis gesetzte Option IncludesNOEXEC hier zufälligerweise weglassen, da Includes deren Fähigkeiten enthält (und ausweitet)
Speziell für untergeordnete Verzeichnisse wird die spezielle Schreibweise
+Option beziehungsweise -Option definiert: Damit lässt sich eine einzelne Option zu den bereits im übergeordneten Kontext gesetzten Optionen hinzufügen beziehungsweise hiervon entfernen
* Mithilfe dieser Möglichkeit lässt sich das gerade zitierte Beispiel einfacher schreiben
<Directory /usr/share/web>
Options FollowSymLinks Indexes IncludesNOEXEC
# ..
* weitere Einstellungen für /usr/share/web
</Directory>
<Directory /usr/share/web/test>
Options +Includes
# ..
* weitere Einstellungen für /usr/share/web/test
</Directory>
AllowOverride Festlegung der lokal überschreibbaren Konfigurationsdirektiven
Modul core Kontext <Directory>
Syntax AllowOverride All|None|Direktiventyp [Direktiventyp ...]
Standardwert All
Diese Direktive legt fest, welche Arten von Konfigurationsdirektiven in .htaccessDateien überschrieben werden dürfen
* Da diese Dateien nur in Verzeichnissen innerhalb der DocumentRoot erlaubt sind, ist auch AllowOverride nur in
<Directory>-Abschnitten gültig
Es ist nicht möglich, die in .htaccess-Dateien gestatteten Direktiven einzeln anzugeben
* Stattdessen definiert AllowOverride zahlreiche Gruppenbezeichnungen, die jeweils Konfigurationsanweisungen mit bestimmten Aufgaben zusammenfas
sen
* Damit Sie genau wissen, welche das jeweils sind, finden Sie in diesem Buch bei der Übersicht jeder einzelnen Direktive, die den Kontext .htaccess besitzt, in Klammern den Wert, den AllowOverride beinhalten muss, um diese Direktive in einer .htaccess-Datei zuzulassen
Hier die einzelnen Werte, die Sie mit Ausnahme von All und None beliebig mischen können
* None: Im angegebenen Verzeichnis und in allen Unterverzeichnissen ohne anderweitige Einstellung akzeptiert Apache gar keine .htaccess-Dateien
* FileInfo: Ermöglicht das Überschreiben der Direktiven, die sich um Dateitypen und -inhalte kümmern
* Indexes: Gestattet das Überschreiben von Direktiven zur automatischen Erzeugung von Verzeichnisindizes (meist in mod_autoindex definiert)
* Limit: Diese Option erlaubt das Überschreiben der Direktiven Order, Allow und Deny zur hostbasierten Zugriffskontrolle
* AuthConfig: Wenn dieser Wert angegeben wird, dürfen alle Direktiven zur Authentifizierung überschrieben werden (siehe Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«)
* Options: Ermöglicht das Überschreiben der bereits besprochenen Direktive Options und anderer Verzeichnisoptions-Direktiven
* All: Diese Einstellung gestattet die Verwendung aller bereits genannten Einzelgruppen sowie einiger zusätzlicher Direktiven
Hier ein Beispiel
<Directory /usr/local/share/apache2/htdocs>
AllowOverride FileInfo Limit AuthConfig
# ..
* weitere Einstellungen für die DocumentRoot
</Directory>
Näheres zu .htaccess-Dateien finden Sie in Abschnitt 6.2, »Kontexte und Container«
Order Reihenfolge, in der Allow- und Deny-Direktiven beachtet werden
Modul mod_access_compat; bis 2.2.x: mod_authz_host; bis 2.0.x: mod_access Kontext <Directory>, <Location>, <Files>, .htaccess (Limit)
Syntax Order Deny,Allow | Allow,Deny | Mutual-failure Standardwert Deny,Allow
Hinweis: Diese Direktive ist seit Version 2.3-beta veraltet; sie wurde durch zusätzliche Werte für die in Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«, besprochene Direktive Require ersetzt
* Zurzeit wird sie aus Kompatibilitätsgründen noch im Modul mod_access_compat unterstützt, dürfte aber mittelfristig ganz abgeschafft werden
Bis Version 2.2 ist diese Direktive allerdings äußerst wichtig
* Order legt die Reihenfolge fest, in der die Regeln aus den Konfigurationsanweisungen Allow und Deny angewendet werden, die wiederum bestimmen, welche Hosts auf die entsprechende Ressource zugreifen dürfen
* Deny,Allow: Diese Reihenfolge ist die Voreinstellung
* Sie besagt, dass zuerst die Deny-Liste und dann die Allow-Liste ausgewertet werden
* Das bedeutet in der Praxis, dass die Regeln nach folgendem Schema ausgewertet werden: »Der Zugriff ist den angegebenen Hosts verboten mit den folgenden Ausnahmen
…« Die sinnvolle Verwendung setzt natürlich voraus, dass für Deny eine allgemeinere Angabe gemacht wird (vorzugsweise Deny from all) als für Allow
Wenn Sie keine weiteren Direktiven verwenden, ist der Standard bei dieser Einstellung Allow from all – alle Hosts dürfen zugreifen
* Allow,Deny: Dies ist die umgekehrte Reihenfolge, die dafür sorgt, dass die Allow-Liste vor der Deny-Liste ausgewertet wird
* Mit anderen Worten: Der Zugriff wird zunächst den angegebenen (üblicherweise allen) Hosts gestattet, bevor er einer kleineren Anzahl verboten wird
* Das Standardverhalten ist in diesem Fall Deny from all, das heißt, alle müssen zunächst draußen bleiben
* Mutual-failure: veraltetes Synonym für Allow,Deny
Bitte beachten Sie, dass zwischen den Aufzählungen Deny,Allow und Allow,Deny kein Leerzeichen nach dem Komma stehen darf
Allow Bestimmt, welche Hosts auf einen Site-Bereich zugreifen dürfen
Modul mod_access_compat; bis 2.2.x: mod_authz_host; bis 2.0.x: mod_access Kontext <Directory>, <Location>, <Files>, .htaccess (Limit)
Syntax Allow from all | Host | env=Umgebungsvariable [Host |
env=Umgebungsvariable ...]
Standardwert nicht gesetzt
Hinweis: Diese Direktive ist seit Version 2.3-beta veraltet; sie wurde durch zusätzliche Werte für die in Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«, ersetzt
* Zurzeit wird sie aus Kompatibilitätsgründen noch im Modul mod_access_compat unterstützt, dürfte aber mittelfristig ganz abgeschafft werden
Bis Apache 2.2 legt die Direktive Allow fest, wer auf eine bestimmte Ressource des Servers zugreifen darf
* Die Werte können eines der folgenden Formate annehmen
* All Grundsätzlich darf jeder Host auf die Inhalte des Kontextes zugreifen, in dem die Direktive definiert ist
* Die entsprechende Apache-2.4-Schreibweise lautet
Require all granted
* Domain-Name Bezeichnet Hosts, deren Name der angegebenen Domain und ihren Subdomains entspricht
* Apache führt zur Ermittlung des Hostnamens eines zugreifenden Rechners zunächst einen Reverse-DNS-Lookup durch, um den zur IPAdresse gehörenden Hostnamen zu ermitteln
* Anschließend wird zur Sicherheit noch einmal ein Forward-Lookup ausgeführt, um sicherzugehen, dass der Hostname wiederum der IP-Adresse entspricht
* Die DNS-Lookups finden in diesem Fall auch dann statt, wenn HostNameLookups (siehe Kapitel 11, »Logging«) deaktiviert ist
Betrachten Sie das folgende Beispiel
Allow from office.mynet.de
Client-Rechner aus den Subdomains office.mynet.de und billing.office.mynet.de dürfen zugreifen, während Clients aus der Domain sales.mynet.de der Zugriff verweigert wird
Die 2.4-Variante ist
Require host office.mynet.de
* Vollständige IP-Adresse Ein solcher Wert gibt die IP-Adresse eines einzelnen Hosts an, der auf den Server zugreifen darf
* Beispiel
Allow from 196.17.8.3
Schreiben Sie für Apache 2.4 stattdessen
Require ip 196.17.8.3
Wenn Sie in einem Bereich Ihrer Website (oder auf dem ganzen Server) zu Testzwecken nur Zugriffe durch den lokalen Rechner selbst gestatten möchten, müssen Sie im entsprechenden Kontext folgende Direktivenfolge verwenden
Order Deny,Allow Deny from all Allow from 127.0.0.1
In 2.4 funktioniert es folgendermaßen
Require ip 127.0.0.1
* Unvollständige IP-Adresse Wenn Sie Zugriffe auf ein bestimmtes IP-Teilnetz beschränken möchten, genügt es oft, den gemeinsamen Netzwerkteil der entsprechenden IP-Adressen anzugeben
* Das folgende Beispiel erlaubt Zugriffe aus dem Netz 196.17.8.0/24
Allow from 196.17.8
Apache 2.4
Require ip 196.17.8
* CIDR-Adresse Sie können ein Teilnetz auch nach der CIDR-Logik angeben (siehe Kapitel 1, »TCP/IP-Netzwerke, Internet und WWW«)
* Wenn die Grenze zwischen Netzwerk- und Hostteil im gewünschten IP-Teilnetz nicht genau an einer ByteGrenze liegt, ist dies sogar erforderlich
* Dieses Beispiel gestattet Zugriffe aus dem Teilnetz 160.76.32.0/19 (Adressbereich 160.76.32.0 bis 160.76.63.255)
Allow from 160.76.32.0/19
Version 2.4
Require ip 160.76.32.0/19
* IP-Adresse/Teilnetzmaske Dies ist eine alternative Schreibweise für CIDR-Adressen
* Beispielsweise können Sie das Netzwerk 160.76.32.0/19 auch folgendermaßen angeben
Allow from 160.76.32.0/255.255.224.0
Ab 2.3-beta
Require ip 160.76.32.0/255.255.224.0
* env=Umgebungsvariable Diese spezielle Form erlaubt Zugriffe nur dann, wenn die angegebene Umgebungsvariable gesetzt ist
* Sinnvoll ist dieses Verfahren im Zusammenhang mit der Direktive SetEnvIf (siehe Kapitel 14, »CGI«)
* Diese setzt eine Variable, wenn die Client-Anfrage eine bestimmte Bedingung erfüllt
* Das folgende Beispiel erlaubt den Zugriff nur, wenn das Referer-Feld der Client-Anfrage mit
http://www.mynet.de beginnt, das heißt, wenn die aktuelle Anfrage durch einen Hyperlink von der eigenen Website aus zustande kam
SetEnvIf Referer "^http://www.mynet.de" locallink Order Deny,Allow Deny from all Allow from env=locallink
Dies ist eine mögliche Methode, um Gefahren durch Cross-Site-Scripting zu verringern
Ab Version 2.3 kann folgende Variante verwendet werden
SetEnvIf Referer "^http://www.mynet.de" locallink Require env locallink
Oder sogar noch kürzer
Require expr "%{HTTP_REFERER} =~ m#^http://www.mynet.de"
Deny Legt fest, welche Hosts nicht auf einen Site-Bereich zugreifen dürfen
Modul mod_access_compat; bis 2.2.x: mod_authz_host; bis 2.0.x: mod_access Kontext <Directory>, <Location>, <Files>, .htaccess (Limit)
Syntax Deny from all | Host | env=Umgebungsvariable [Host |
env=Umgebungsvariable ...]
Standardwert nicht gesetzt
Hinweis: Diese Direktive ist seit Version 2.3-beta veraltet; sie wurde durch zusätzliche Werte für die in Kapitel 9, »Authentifizierung, Autorisierung und Zugriffskontrolle«, ersetzt
* Zurzeit wird sie aus Kompatibilitätsgründen noch im Modul mod_access_compat unterstützt, dürfte aber mittelfristig ganz abgeschafft werden
Die Syntax von Deny ist mit Allow identisch
* Die Direktive bestimmt, welche Hosts vom Zugriff auf eine Server-Ressource ausgeschlossen sind
* In welcher Reihenfolge Allow und Deny ausgewertet werden, regelt die bereits besprochene Direktive Order
Das folgende Beispiel verbietet zunächst einmal allen Hosts den Zugriff und erlaubt ihn anschließend Hosts aus den Domains office.mynet.de und external.mynet.de
Order Deny,Allow Deny from all Allow from office.mynet.de external.mynet.de
In Apache 2.4 genügt dazu folgende Zeile
Require host office.mynet.de external.mynet.de
Dieses Beispiel erlaubt dagegen allen Hosts den Zugriff, die nicht zur Domain unsere-konkurrenz.de4 gehören
Order Allow,Deny Allow from all Deny from unsere-konkurrenz.de
In Versionen ab 2.3-beta können Sie dies folgendermaßen ausdrücken
<RequireAll>
Require all granted Require not host unsere-konkurrenz.de
</RequireAll>
AllowMethods Legt fest, welche HTTP-Zugriffsmethoden in einem bestimmten Kontext erlaubt sind
Seit Version 2.3
Modul mod_allowmethods Kontext <Directory>, <Location>, <Files>
Syntax AllowMethod HTTP-Methode [HTTP-Methode ...]
Standardwert nicht gesetzt
Das neue Modul mod_allowmethods stellt die Direktive AllowMethods zur Verfügung
* Diese ermöglicht innerhalb eines Verzeichniskontextes die Angabe der HTTP-Anfragemethoden, mit denen Benutzer auf die Ressourcen innerhalb des Verzeichnisses zugreifen dürfen
* Dies ist einfacher als mit <Limit>-Containern, aber zurzeit gilt das Modul noch als experimentell
Das folgende Beispiel erlaubt im aktuellen Kontext die Methoden GET, POST und HEAD
AllowMethods GET POST HEAD
4 Natürlich nützt das in dieser Form nichts, weil die normalen Büro-PCs der auszuschließenden Konkurrenzfirma wahrscheinlich mit temporären IP-Adressen und Domain-Namen wie xdsl-client-08-15.t-online.de im Netz unterwegs sind. Überdies könnten Sie rechtliche Probleme bekommen (unlauterer Wettbewerb), wenn Sie die Konkurrenz explizit vom Zugriff auf Seiten ausschließen, die ansonsten für alle Welt zugänglich sind
Voreinstellung für alle Verzeichnisse Aus Sicherheitsgründen sollten Sie – wie in einigen speziellen Zusammenhängen bereits erwähnt – zunächst einmal Einstellungen für das Wurzelverzeichnis (/)
vornehmen
* Sämtliche Zugriffe und Optionen sollten hier verboten werden
Diese Einstellungen werden von allen unspezifizierten Verzeichnissen sowie allen <Directory>-, <Files>- und <Location>-Containern automatisch übernommen
* Anschließend können Sie für einzelne untergeordnete Ressourcen jeweils die benötigten Optionen freischalten
Ein üblicher Grundeinstellungs-Container sieht beispielsweise so aus
<Directory />
# Alle Optionen deaktivieren Options None
# Sämtliches Überschreiben durch .htaccess dekativieren AllowOverride None
# Zugriffe aller Clients verbieten Require all denied
# Bis 2.2 werden statt "Require all denied"
# folgende zwei Zeilen verwendet
#Order Deny,Allow
#Deny from all
</Directory>
Die vorgefertigte Konfigurationsdatei enthält normalerweise nicht die Angabe Options None, sondern Options FollowSymLinks
* Auf einem Server, den Sie allein verwalten, ist dies kein großes Problem, da Sie selbst entscheiden können, welche symbolischen Links Sie überhaupt anlegen möchten
* Andererseits schadet es auch nichts, FollowSymLinks global zu deaktivieren und dann zusammen mit den anderen Optionen jeweils im Einzelfall einzuschalten
Sinnvolle Einstellungen für die DocumentRoot Die DocumentRoot bildet, wie erwähnt, das Wurzelverzeichnis der Website, die Apache ausliefert, wenn kein virtueller Host angesprochen wurde
* Für dieses Verzeichnis müssen Sie demzufolge einige Einstellungen der globalen Verzeichniskonfiguration überschreiben, um die Website im Internet zu veröffentlichen
Hier zunächst ein typisches Beispiel
<Directory /usr/local/share/apache2/htdocs>
Options Indexes FollowSymLinks MultiViews AllowOverride None Require all granted
# Bis 2.2 folgende zwei Zeilen anstelle von "Require all granted"
#Order allow,deny
#Allow from all
</Directory>
Bei dieser Konfiguration sind die Optionen Indexes, FollowSymLinks und MultiViews eingeschaltet
* Wenn Sie mit Server Side Includes arbeiten möchten
(siehe Kapitel 16, »SSI und Filter«), müssen Sie zusätzlich Includes aktivieren
* Für CGI sollte dagegen in der Regel nicht ExecCGI verwendet werden, sondern ein per ScriptAlias in die DocumentRoot abgebildetes cgi-bin-Verzeichnis (Genaueres dazu in Kapitel 14, »CGI«)
Die Verwendung von .htaccess-Dateien wurde hier ebenfalls abgeschaltet
* In Abschnitt 6.2, »Kontexte und Container«, wurde bereits begründet, warum dies in den meisten Fällen ratsam ist
Zu guter Letzt wurde der Zugriff auf die Site für beliebige Hosts gestattet


<noinclude>
<noinclude>
Zeile 604: Zeile 11:
== Anhang ==
== Anhang ==
=== Siehe auch ===
=== Siehe auch ===
{{Special:PrefixIndex/{{BASEPAGENAME}}}}
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}
==== Links ====
=== Links ===
===== Weblinks =====
==== Weblinks ====
</noinclude>
</noinclude>
[[Kategorie:Apache/HTTP/06]]

Aktuelle Version vom 14. Juni 2026, 00:51 Uhr

Apache/06 Grundkonfiguration/3 Allgemeine Direktiven - Allgemeine Konfigurationsdirektiven

Beschreibung

Direktiven für den grundlegenden Betrieb von Apache und einer einfachen Website aus statischen Dokumenten

  • Es handelt sich ausschließlich um solche Konfigurationsanweisungen, die zum Kern des Servers (core) gehören oder
  • in MPM-Modulen und in solchen Modulen verfügbar sind, die standardmäßig zu Apache gehören und aktiviert sind



Anhang

Siehe auch