Advertisement
  1. Code
  2. Cloud & Hosting
  3. Web Servers

Erweiterte Apache 2-Konfiguration auf Unix-ähnlichen Systemen

Scroll to top
Read Time: 10 min

() translation by (you can also view the original English article)

In einem früheren Tutorial haben wir uns einige der grundlegendsten, aber wichtigsten Apache-Konfigurationsanweisungen angesehen - wofür sie gedacht sind und wie sie an unsere Anforderungen angepasst werden können. Für eine sehr einfache Website (vielleicht eine mit nur wenigen statischen HTML-Seiten) sind diese einfachen Anweisungen möglicherweise alles, was Sie wissen müssen. Möglicherweise benötigen Sie jedoch eine komplexere Website. Heute werden wir uns einige erweiterte Anweisungen und Konfigurationseinstellungen ansehen.

Das Verhalten von Apache wird durch Einstellungen und Anweisungen gesteuert, die in Nur-Text-Konfigurationsdateien angewendet werden, die normalerweise mit der Erweiterung ".conf" enden.

Die wichtigste .conf-Datei ist httpd.conf, obwohl dies von Ihrer speziellen Installation und Linux-Distribution abhängt (z. B. könnte sie stattdessen als apache2.conf bezeichnet werden). Diese Konfigurationsdateien gelten im Allgemeinen für den gesamten Server, auch wenn auf dem Server mehrere Websites gehostet werden.

Konfigurationsdateien pro Verzeichnis werden standardmäßig als ".htaccess"-Dateien bezeichnet und befinden sich im öffentlichen Dokumentverzeichnis des Webservers. Diese ermöglichen die Anwendung bestimmter Anweisungen auf bestimmte Verzeichnisse und deren Unterverzeichnisse und nicht auf den gesamten Server und alle gehosteten Websites. Obwohl nicht empfohlen, können Sie den Namen der .htaccess-Datei mithilfe der AccessFileName-Direktive, die in httpd.conf festgelegt werden kann, in einen anderen Namen ändern:

1
#
2
# AccessFileName: The name of the file to look for in each  directory
3
# for additional configuration directives.
4
#
5
AccessFileName .htaccess

Bitte beachten Sie, dass htaccess keine Erweiterung ist. Es ist der Name der Datei. Unter UNIX-ähnlichen Betriebssystemen bedeutet der Punkt (.) Vor einem Dateinamen, dass die Datei ausgeblendet ist.

In Anbetracht ihres Speicherorts im Dateisystem können nicht alle Anweisungen in .htaccess-Dateien angewendet werden, da einige möglicherweise einfach nicht gültig sind. Jede Zeile in einer Konfigurationsdatei muss mit einer der folgenden Zeilen beginnen:

  • ein #, das einen Kommentar anzeigt
  • eine gültige Richtlinie
  • ein Leerzeichen
  • eine leere Zeile

Wenn eine Zeile nicht mit einer der oben genannten Optionen beginnt, gibt Apache eine Fehlermeldung aus, anstatt den HTTP-Dienst zu starten. Daher ist es wichtig, dass Sie sicherstellen, dass die Serverkonfiguration gültig ist. Wenn sich eine Direktive über mehrere Zeilen erstreckt, beenden Sie jede Zeile mit einem Schrägstrich(\), bevor Sie mit der nächsten Direktive fortfahren.


Flexibilität erhalten

Die wichtigste .conf-Datei ist httpd.conf.

Während Sie Ihre eigenen Änderungen an den Standardkonfigurationsdateien vornehmen, ist es am besten, diese Änderungen in externe Dateien aufzuteilen (natürlich mit aussagekräftigen Namen) und sie mithilfe der include-Direktive in die Hauptkonfigurationsdatei aufzunehmen. Wenn es nicht möglich ist, Ihre Einstellungen von den Standardeinstellungen des Servers zu trennen, sollten Sie zumindest alte Einstellungen auskommentieren, bevor Sie neue einführen. Auf diese Weise können Sie bei Bedarf problemlos auf eine beliebige Dateiversion zurücksetzen und mit minimalem Aufwand auf eine neuere Version der Datei httpd.conf aktualisieren. Alles, was Sie tun müssen, ist, die neue Version anstelle der alten zu kopieren und Ihre Includes am Ende der neuen Datei erneut einzufügen (oder zumindest Ihre alten Änderungen erneut anzuwenden, nachdem Sie die Standardänderungen in der neuen Datei auskommentiert haben). . Zum Beispiel:

1
.
2
.
3
.
4
# End of default apache configuration
5
6
#Beginning of your new configuration and settings
7
8
# Include ports listing
9
Include /etc/apache2/ports.conf
10
11
# Include generic snippets of statements
12
Include /etc/apache2/conf.d/
13
14
# Include module configuration:
15
Include /etc/apache2/mods-enabled/*.load
16
Include /etc/apache2/mods-enabled/*.conf

Wie Sie dem obigen Beispiel entnehmen können, können Sie eine bestimmte Datei nach Namen, ein Verzeichnis (und alle darin enthaltenen Dateien und Unterverzeichnisse) oder mehrere Dateien mithilfe von Platzhaltern einfügen.


Erweitertes Setup

In meinem vorherigen Tutorial über Apache haben Sie einige grundlegende Anweisungen gelernt, die das Verhalten von Apache steuern. In diesem Tutorial werden einige erweiterte Anweisungen vorgestellt, beginnend mit <Directory>.

Die <Directory>-Richtlinie

Mit der Direktive <Directory> können Sie Einstellungen und Direktiven angeben, die auf Verzeichnisse und Unterverzeichnisse angewendet werden sollen. Auf diese Weise können Sie alle möglichen Aufgaben ausführen, z. B. den Zugriff auf bestimmte Verzeichnisse und Dateien einschränken und unter anderem bestimmte Optionen für bestimmte Verzeichnisse aktivieren oder deaktivieren.

Die <Directory>-Tags nehmen einen Pfad und schließen einen Block von Optionen ein, die auf dieses Verzeichnis und seine Unterverzeichnisse angewendet werden sollen. Hier ist ein Beispiel:

1
<Directory />
2
    Options  None
3
    AllowOverride  None
4
    Order  Deny,Allow
5
    Deny  from all
6
</Directory>

Das öffnende <Directory>-Tag in diesem Beispiel gibt einen Pfad von / an, dh das Stammverzeichnis und alle seine Unterverzeichnisse und Dateien. Die in den <Directory>-Tags definierten Einstellungen gelten für den Pfad / (im Wesentlichen alles im Stammverzeichnis).

Beachten Sie, dass htaccess keine Erweiterung ist. Es ist der Name der Datei.

Die Options-Direktive deklariert, welche Serverfunktionen für das angegebene Verzeichnis gültig sind. In diesem Beispiel sind keine Optionen für den Pfad / gültig. Sie können jedoch eine beliebige Anzahl von Optionen angeben, z. B. das Zulassen symbolischer Links, das Ausführen von CGI-Skripten, das Zulassen serverseitiger Includes und vieles mehr.

Die AllowOverride-Direktive teilt dem Server mit, welche in den <Directory>-Tags deklarierten Einstellungen überschrieben werden sollen, wenn sie in der .htaccess-Datei zurückgesetzt werden. Wenn der Server eine .htaccess-Datei findet, muss er wissen, welche in dieser Datei deklarierten Anweisungen frühere Konfigurationsanweisungen überschreiben können. Wenn AllowOverride wie im obigen Beispiel auf None gesetzt ist, werden keine Anweisungen überschrieben und Neudeklarationen in den .htaccess-Dateien werden vollständig ignoriert.

Wenn die AllowOverride-Direktive auf All gesetzt ist, überschreibt jede in der .htaccess-Datei neu deklarierte Direktive frühere Konfigurationsanweisungen. AllowOverride kann bestimmte Direktiventypen annehmen, die überschrieben werden können, während der Rest ignoriert wird.

Deny und Allow steuern den Zugriff auf das im Eröffnungs-Tag angegebene Verzeichnis und werden durch die Order-Direktive priorisiert.

Im obigen Beispiel bedeutet Order Deny, Allow, dass allen Verbindungshosts oder IP-Adressen der Zugriff auf das Stammverzeichnis verweigert wird, mit Ausnahme derjenigen, die als gute Hosts deklariert wurden. Order Allow, Deny bedeutet andererseits, dass allen Hosts und IPs Zugriff auf das Stammverzeichnis gewährt werden soll, mit Ausnahme derjenigen, die als fehlerhaft oder auf der schwarzen Liste deklariert sind.

Die Deny from all verweigern erklärt, dass der Zugriff von allen Hosts verweigert werden muss. Da keine Whitelist folgt, haben keine Hosts oder IPs Zugriff auf das Stammverzeichnis (und dies sollte aus Sicherheitsgründen so sein). NUR zu Demonstrationszwecken zeigt das folgende Beispiel, wie der Zugriff von allen Hosts außer www.goodhost1.com und www.goodhost2.com verweigert wird:

1
<Directory />
2
    Order  Deny,Allow
3
    Deny  from all
4
    Allow  from www.goodhost1.com www.goodhost2.com
5
</Directory&gt;

Beachten Sie, dass die Order-Direktive den Vorrang der Regeln definiert. Daher verweigern wir zunächst allen Hosts den Zugriff und erlauben dann nur den Zugriff auf www.goodhost1.com und www.goodhost2.com. Alternativ können Sie die beiden Hosts in einer separaten Zeile wie folgt angeben:

1
<Directory />
2
    Order  Deny,Allow
3
    Deny  from all
4
    Allow  from www.goodhost1.com
5
    Allow from www.goodhost2.com
6
</Directory>

Wenn Sie den Zugriff auf alle Subdomains des Hosts goodhost.com zulassen möchten (z. B. sub1.goodhost.com, sub2.goodhost.com und sub3.goodhost.com), können Sie einen partiellen Domainnamen angeben, um den Zugriff zu gewähren statt alle zulässigen Subdomains aufzulisten. Das folgende Beispiel zeigt Ihnen, wie:

1
<Directory />
2
    Order  Deny,Allow
3
    Deny  from all
4
    Allow  from goodhost.com
5
</Directory>

Wenn Sie den Zugriff von allen außer einer bestimmten IP-Adresse im lokalen Netzwerk verweigern möchten, zeigt das folgende Beispiel, wie Sie dies tun können:

1
<Directory />
2
    Order  Deny,Allow
3
    Deny  from all
4
    Allow  from 192.168.2.103
5
</Directory>

Wenn Sie den Zugriff auf alle Hosts mit Ausnahme einiger schlechter Hosts zulassen möchten, können Sie Folgendes tun:

1
<Directory /usr/local/apache2/htdocs/>
2
    Order Allow,Deny
3
    Allow from all
4
    Deny from www.badbot1.com  badbot2.com spamhost.com
5
</Directory>

Das obige Beispiel öffnet das öffentliche Verzeichnis für alle verbundenen Clients mit Ausnahme von zwei fehlerhaften Bots und einem Spam-Host. Beachten Sie die Verwendung entweder des gesamten Domainnamens oder des partiellen Domainnamens in der Host-Blacklist.

Ähnlich wie <Directory> ist <DirectoryMatch>. Es enthält eine Gruppe von Anweisungen, die nur für das angegebene Verzeichnis und seine Unterverzeichnisse gelten. Anstatt einen Pfad anzugeben, wird ein regulärer Ausdruck als Argument verwendet.

Indexes und DirectoryIndex-Direktiven

Wenn Sie eine Website besuchen, geben Sie häufig nur den Domainnamen ein, ohne eine Seite anzugeben (z. B. www.example.com im Gegensatz zu www.example.com/index.html). Der Grund dafür ist, dass der Server normalerweise immer die Standardseite anzeigt.

Diese Funktionalität wird durch die DirectoryIndex-Direktive auf dem Webserver geregelt. Es teilt dem Server die Standardseite mit, mit der er antworten soll, wenn in der URL keine Datei angegeben ist.

DirectoryIndex kann mehrere Werte annehmen (d.h. mehr als einen Dateinamen). Wenn der Server auf eine Anforderung stößt, die keine bestimmte Datei angibt, durchläuft der Server die vielen Werte nacheinander, bis er eine Datei mit dem Namen findet gleicher Name im angeforderten Verzeichnis.

1
<Directory /usr/local/apache2/htdocs/>
2
    DirectoryIndex  index.php index.html
3
</Directory>

Wenn ein Client nach einem Verzeichnis fragt, das keine der in der DirectoryIndex-Direktive aufgelisteten Standarddateien enthält, antwortet der Server mit der Verzeichnisliste, einer Liste aller in diesem Ordner enthaltenen Dateien und Unterverzeichnisse. Dies kann möglicherweise ein Sicherheitsrisiko darstellen, da die Dateien und die Dateisystemstruktur des angeforderten Verzeichnisses verfügbar sind. Sie können dieses Verhalten vermeiden, indem Sie die Option Indexes verwenden, um die Verzeichnisliste auf DocumentRoot-Ebene (dem Stammverzeichnis der htdocs oder öffentlichen Dateien des Servers) zu verhindern. Wenn Sie Ordnerlisten für ein Unterverzeichnis unter DocumentRoot anzeigen möchten, können Sie die Option Indexes für diesen bestimmten Ordner aktivieren. Die folgende Auflistung zeigt dies:

1
<Directory /usr/local/apache2/htdocs/>
2
    Options  -Indexes
3
</Directory>
4
5
<Directory /usr/local/apache2/htdocs/sub-dir1/>
6
    Options  Indexes
7
</Directory></p>

Im obigen Beispiel werden Verzeichnislisten im öffentlichen Haupt-HTML-Ordner (in diesem Fall /usr/local/apache2/htdocs/) und in allen Unterverzeichnissen deaktiviert und nur für /usr/local/apache2/htdocs/sub-dir1/ Unterverzeichnis.

Die <Files>-Richtlinie

Während die Direktive <Directory> die Berechtigungen oder Einschränkungen angibt, die auf ein bestimmtes Verzeichnis angewendet werden sollen, steuert die Direktive <Files> die Einschränkungen und Berechtigungen für eine oder mehrere Dateien (Platzhalter müssen innerhalb eines Dateinamens verwendet werden, um mehrere Dateien anzugeben). Schauen Sie sich diese Liste an:

1
<Files ".htaccess">
2
    Order  allow,deny
3
    Deny  from all
4
</Files>

In diesem Beispiel wird die Direktive <Files> verwendet, um zu verhindern, dass .htaccess-Dateien von Webclients angezeigt werden. Das folgende Bild ist ein Screenshot dessen, was der Server reagiert, wenn Sie versuchen, die .htaccess-Datei abzurufen, indem Sie etwas wie https://www.example.com/.htaccess anfordern.

Ebenso begrenzt die <FilesMatch>-Direktive den Umfang der eingeschlossenen Direktiven nach Dateinamen, genau wie die <Files>-Richtlinie. Es akzeptiert jedoch einen regulären Ausdruck als Argument.

Die <Location>-Richtlinie

Die Anweisung <Location> funktioniert ähnlich wie die Anweisung <Directory>, außer dass eine URL als Argument verwendet wird, im Gegensatz zu einem Pfad zu einem lokalen physischen Verzeichnis im Dateisystem. Dies bedeutet, dass mit <Location> Inhalte außerhalb des Servers gesteuert werden können.

Es wird dringend empfohlen, die Anweisung <Location> nicht mit lokalen Dateisystemspeicherorten zu verwenden, da viele URLs möglicherweise derselben Datei zugeordnet sind.

Die <LocationMatch>-Direktive begrenzt auch den Umfang der eingeschlossenen Direktiven nach URL. Wie die anderen "Match"-Direktiven akzeptiert es einen regulären Ausdruck als Argument.

Die Anweisungen <Limit> und <LimitExcept>

Die Anweisung <Limit> steuert, welche HTTP-Methoden (z. B. GET, POST usw.) zulässig sind. Wie im folgenden Beispiel zu sehen ist, verweigert die Anweisung <Limit> die Verwendung der Methoden POST, PUT und DELETE für alle Clientanforderungen, mit Ausnahme derjenigen, die von 50.57.77.153 stammen.

1
<Limit POST PUT DELETE>
2
    Order Deny,Allow
3
    Deny from all
4
    Allow from 50.57.77.153
5
</Limit>

Die Direktive <LimitExcept> bietet die entgegengesetzte Funktionalität. Es steuert weiterhin, welche HTTP-Methoden zulässig sind, dies jedoch ausschließlich. Im folgenden Beispiel verweigert <LimitExcept> den Zugriff auf alle Clientanforderungen mithilfe anderer HTTP-Methoden als GET und POST.

1
<LimitExcept GET POST>
2
    deny  from all
3
</LimitExcept>

Konfigurationsstruktur und Vorrang der Richtlinie

Es wird dringend empfohlen, die Anweisung <Location> nicht mit lokalen Dateisystemspeicherorten zu verwenden.

Die Leistung von Apache beruht auf der Möglichkeit, die Funktionen des Servers durch Module zu erweitern, die von anderen Programmierern geschrieben wurden. Daher können Anweisungen entweder im Apache-Kerncode oder in installierten Modulen festgelegt werden. Um die Wirkung und den Umfang einer Direktive zu priorisieren, unterteilt Apache ihre Konfigurationsstruktur in drei Ebenen:

  • Konfiguration auf Serverebene
  • Container-Direktiven
  • Konfiguration pro Verzeichnis

Die Konfiguration auf Serverebene enthält die Standardanweisungen, die für den gesamten Server festgelegt wurden. Diese Anweisungen können dann durch Konfigurationsdateien pro Verzeichnis (.htaccess-Dateien) oder innerhalb von Containeranweisungen (wie den Tags <Directory> und <Files>) überschrieben werden.

Dateien pro Verzeichnis befinden sich normalerweise in der Dateistruktur des öffentlichen Verzeichnisses (oder können dieser hinzugefügt werden). Der Inhalt steht Subadministratoren und Entwicklern zur Verfügung, die somit die Möglichkeit haben, sich mit der Serverkonfiguration zu beschäftigen, indem sie verschiedenen Teilen des Servers Anweisungen aller Art hinzufügen. Daher kann der Serveradministrator steuern, welche Anweisungen in diesen Dateien angewendet werden können und welche Anweisungen die Standardserverkonfiguration überschreiben können oder nicht.


Abschluss

Dieser Artikel war für Serveradministratoren gedacht, um eine Referenz für erweiterte Apache-Einstellungen und Konfigurationsoptionen bereitzustellen. Wie wir erfahren haben, können Sie diese Anweisungen entweder auf Serverebene oder auf Verzeichnisebene anwenden. Abhängig davon, wie und wo Sie diese Anweisungen festlegen, kombiniert Ihr Server diese Einstellungen zu einer einheitlichen endgültigen Konfiguration.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.