Apache2- Server einrichten unter Ubuntu 23.10

Apache logo

Eine ausführliche Anleitung zur Installation und Konfiguration eines Apache2- Servers unter Ubuntu 23.10 oder 22.04

Die Anleitung ist recht umfangreich, für den ersten Start mit PHP müssen Sie aber keine Konfiguration vornehmen. Wir empfehlen nur, den Port auf localhostzu beschränken, wie unten beschrieben.

Unter Ubuntu finden Sie den Apache2 Server in den Paketquellen. Aktualisieren Sie vor der Installation zunächst Ihr System, in einem Terminal mit dem Befehl

sudo apt update -y

Installation

sudo apt install apache2 -y

Verzeichnis: Nach der Installation findet man ihn unter /etc/apache2 .

Konfiguration:

Apache2 wird konfiguriert, indem Anweisungen in Klartext-Konfigurationsdateien in /etc/apache2/ hinterlegt werden. Diese Anweisungen (Direktiven) sind zwischen den folgenden Dateien und Verzeichnissen aufgeteilt:

  • apache2.conf : die primäre Konfigurationsdatei, enthält globale Einstellungen (früher: httpd.conf)
  • envvars : Umgebungsvariablen festlegen
  • magic : Anweisungen zur Ermittlung des MIME-Typs anhand der ersten paar Bytes einer Datei.
  • ports.conf : Enthält die Anweisungen, die bestimmen, auf welchen TCP-Ports der Apache2 Server lauscht.

Verzeichnisse:

  • conf-available : Dieses Verzeichnis enthält die verfügbaren Konfigurationsdateien.
  • conf-enabled : enthält Symlinks zu den Dateien in /etc/apache2/conf-available. Wenn eine Konfigurationsdatei mit einem Symlink versehen ist, wird sie beim nächsten Neustart von Apache2 aktiviert.
  • mods-available : enthält Konfigurationsdateien zum Laden und Konfigurieren von Modulen. Nicht alle Module haben jedoch spezifische Konfigurationsdateien.
  • mods-enabled : enthält Symlinks zu den Dateien in /etc/apache2/mods-available. Wenn eine Modulkonfigurationsdatei mit einem Symlink versehen ist, wird sie beim nächsten Neustart von Apache2 aktiviert.
  • sites-available : enthält Konfigurationsdateien für Apache2 Virtual Hosts. Virtuelle Hosts ermöglichen es, Apache2 für mehrere Webseiten einzurichten, die separate Konfigurationen haben.
  • sites-enabled : wie mods-enabled enthält sites-enabled Symlinks auf das Verzeichnis /etc/apache2/sites-available. Wenn eine Konfigurationsdatei in sites-available mit einem Symlink versehen ist, wird die damit konfigurierte Site nach einem Neustart von Apache2 aktiv.

Exkurs Symlink:

Ein Symlink (Symbolischer Link) ist eine Verknüpfung innerhalb des Dateisystems. Es handelt sich um eine Datei, die einen Link zur Originaldatei enthält. Man kann damit von verschiedenen Orten eines Dateisystems auf ein und dieselbe Datei zugreifen. Symlinks können auch auf Verzeichnisse zeigen.

Konfiguration

Ubuntu Docs: Server

Apache2 wird mit einer „virtual-host-freundlichen“ Standardkonfiguration ausgeliefert – er ist mit einem einzigen virtuellen Standard-Host konfiguriert (unter Verwendung der VirtualHost-Anweisung), der geändert oder unverändert verwendet werden kann, wenn Sie nur eine einzige Website haben, oder als Vorlage für zusätzliche virtuelle Hosts, wenn Sie mehrere Sites haben.

Bleibt die Konfiguration des Virtual-Hosts unverändert, dient der virtuelle Standard-Host als Ihre Standard-Site oder als die Site, die Benutzer sehen, wenn die eingegebene URL nicht mit der ServerName-Direktive einer Ihrer benutzerdefinierten Sites übereinstimmt. Um den Standard-Virtual-Host zu ändern, bearbeiten Sie die Datei /etc/apache2/sites-available/000-default.conf.

Mehrere Seiten:

Wenn Sie einen neuen virtuellen Host oder eine neue Site konfigurieren möchten, kopieren Sie die Datei 000-default.conf in dasselbe Verzeichnis mit einem von Ihnen gewählten Namen. Zum Beispiel:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/mynewsite.conf

Anschließend passen Sie die neue Konfigurationsdatei an.

Exkurs: Virtual Host

Der Apache-Webserver kann so konfiguriert werden, dass er für unterschiedliche Hostnamen verschiedene Inhalte liefert. Dies wird als „Virtual Hosting“ bezeichnet und ist nützlich, um viele Websites auf einem Apache-Webserver zur Verfügung zu stellen.

Jede dieser Websites nennt sich Virtual Host, nicht für jede dieser Websites eine eigene IP Adresse vergeben werden, alle Virtual Hosts können sich eine IP-Adresse teilen.

Die Listen-Direktive

Zu finden in /etc/apache2/ports.conf

gibt den Port und optional die IP-Adresse an, an denen Apache2 lauschen soll. Wenn die IP-Adresse nicht angegeben wird, lauscht der Apache2 an allen IP-Adressen, die dem Rechner zugewiesen sind, auf dem er läuft. Der Standardwert für die Listen-Anweisung ist 80. Ändern Sie diesen Wert in:

  • 127.0.0.1:80, um Apache2 nur auf Ihrer Loopback-Schnittstelle (localhost) lauschen zu lassen, so dass er für das Internet nicht verfügbar ist,
  • auf z.B. 81, um den Port zu ändern, auf dem er lauscht,
  • oder belassen Sie ihn für den normalen Betrieb so, wie er ist.

Die Direktive ServerName (optional)

Gibt an, auf welchen FQDN [[FQDN]] Ihre Site antworten soll. Der virtuelle Standard-Host hat keine ServerName-Anweisung angegeben, so dass er auf alle Anfragen antwortet, die nicht mit einer ServerName-Anweisung in einem anderen virtuellen Host übereinstimmen. Wenn Sie gerade den Domainnamen „mynewsite.com“ erworben haben und ihn auf Ihrem Ubuntu-Server hosten möchten, sollte der Wert der ServerName-Anweisung in der Konfigurationsdatei Ihres virtuellen Hosts mynewsite.com lauten. Fügen Sie diese Direktive zu der neuen virtuellen Hostdatei hinzu, die Sie zuvor erstellt haben (/etc/apache2/sites-available/mynewsite.conf).

Die ServerAlias-Direktive

Vielleicht möchten Sie auch, dass Ihre Website auf www.mynewsite.com antwortet, da viele Benutzer davon ausgehen, dass das Präfix www dazugehört – verwenden Sie hierfür die ServerAlias-Anweisung. Sie können auch Wildcards in der ServerAlias-Anweisung verwenden.

Die folgende Konfiguration führt beispielsweise dazu, dass Ihre Website auf jede Domain-Anfrage antwortet, die auf .mynewsite.com endet.ServerAlias *.mynewsite.com

Die DocumentRoot-Direktive

gibt an, wo der Apache2 nach den Dateien suchen soll, aus denen die Website besteht. Der Standardwert ist /var/www/html, wie in /etc/apache2/sites-available/000-default.conf angegeben. Ändern Sie diesen Wert gegebenenfalls in der VirtualHost-Datei Ihrer Site, und denken Sie daran, dieses Verzeichnis zu erstellen, falls erforderlich!

Aktivieren Sie den neuen VirtualHost mit dem Dienstprogramm a2ensite und starten Sie Apache2 neu:sudo a2ensite mynewsite
sudo systemctl restart apache2.service


a2ensite ist ein Skript, das die angegebene Site (die einen VirtualHost-Block enthält) innerhalb der Apache2-Konfiguration aktiviert. Dazu erstellt es Symlinks in /etc/apache2/sites-enabled. Umgekehrt deaktiviert a2dissite eine Site, indem es diese Symlinks entfernt.

Anmerkung: Achten Sie darauf, „mynewsite“ durch einen aussagekräftigeren Namen für den VirtualHost zu ersetzen. Eine Möglichkeit ist, die Datei nach der Direktive ServerName des VirtualHosts zu benennen.

In ähnlicher Weise können Sie mit dem Dienstprogramm a2dissite Sites deaktivieren. Dies kann bei der Fehlersuche bei Konfigurationsproblemen mit mehreren virtuellen Hosts nützlich sein:sudo a2dissite mynewsite
sudo systemctl restart apache2.service

Server Neustart

Damit Konfigurationsänderungen wirksam werden, ist meist ein Neustart erforderlich.

sudo systemctl restart apache2

Standardeinstellungen des Apache2-Servers

Wenn Sie z.B. einen virtuellen Host hinzufügen, haben die Einstellungen, die Sie für diesen virtuellen Host festlegen, Vorrang für diesen virtuellen Host. Für eine Direktive (Anweisung), die nicht in den Einstellungen des virtuellen Hosts definiert ist, wird der Standardwert verwendet.

Der DirectoryIndex

Der DirectoryIndex ist die Standardseite, die der Server liefert, wenn ein Benutzer einen Index eines Verzeichnisses anfordert, indem er einen Schrägstrich (/) am Ende des Verzeichnisnamens angibt.

Wenn ein Benutzer beispielsweise die Seite http://www.example.com/this_directory/ anfordert, erhält er entweder die Seite DirectoryIndex (wenn sie vorhanden ist), eine vom Server generierte Verzeichnisliste (wenn die Seite nicht vorhanden ist und die Option Indexes angegeben ist) oder eine Seite mit dem Hinweis „Permission Denied“ (Zugriff verweigert) ausgibt, wenn beides nicht zutrifft.

Der Server versucht, eine der in der DirectoryIndex-Direktive aufgeführten Dateien zu finden und gibt die erste gefundene Datei zurück. Findet er keine dieser Dateien und ist für das Verzeichnis Options Indexes gesetzt, erzeugt der Server eine Liste der Unterverzeichnisse und Dateien des Verzeichnisses im HTML-Format und gibt sie zurück. Der Standardwert, der in /etc/apache2/mods-available/dir.conf zu finden ist, lautet `index.html index.cgi index.pl index.php index.xhtml index.htm. Findet Apache2 also in einem angeforderten Verzeichnis eine Datei, die auf einen dieser Namen passt, wird die erste angezeigt.

Das ErrorDocument

Die ErrorDocument-Direktive erlaubt es Ihnen, eine Datei anzugeben, die der Apache2 bei bestimmten Fehlerereignissen verwenden soll. Wenn zum Beispiel ein Benutzer eine Ressource anfordert, die nicht existiert, tritt ein 404-Fehler auf.

Standardmäßig gibt der Apache2 einen HTTP 404 Return Code zurück. Lesen Sie /etc/apache2/conf-available/localized-error-pages.conf für detaillierte Anweisungen zur Verwendung von ErrorDocument, einschließlich der Speicherorte von Beispieldateien.

CustomLog und ErrorLog

Standardmäßig schreibt der Server das Übertragungsprotokoll in die Datei /var/log/apache2/access.log. Sie können dies in den Konfigurationsdateien Ihrer virtuellen Hosts mit der Direktive CustomLog für jeden Standort einzeln ändern oder die Anweisung weglassen, um die Voreinstellung zu akzeptieren, die in /etc/apache2/conf-available/other-vhosts-access-log.conf festgelegt ist.

Sie können auch die Datei angeben, in der Fehler protokolliert werden sollen, und zwar über die Anweisung ErrorLog, deren Standardwert /var/log/apache2/error.log ist. Diese werden getrennt von den Übertragungsprotokollen aufbewahrt, um die Fehlersuche bei Problemen mit Ihrem Apache2-Server zu erleichtern. Sie können auch den LogLevel (der Standardwert ist „warn“) und das LogFormat angeben (siehe /etc/apache2/apache2.conf für den Standardwert).

Die Anweisung Options

Einige Optionen werden pro Verzeichnis und nicht pro Server angegeben. Options ist eine dieser Direktiven. Eine Verzeichnisangabe wird in XML-ähnliche Tags eingeschlossen, etwa so:

<Directory /var/www/html/mynewsite>
   ...
</Directory>

Die Options-Direktive innerhalb einer Verzeichnisangabe akzeptiert einen oder mehrere der folgenden Werte (neben anderen), getrennt durch Leerzeichen:

ExecCGI Erlaubt die Ausführung von CGI-Skripten. CGI-Skripte werden nicht ausgeführt, wenn diese Option nicht gewählt wird.

Vorsicht: Die meisten Dateien sollten nicht als CGI-Skripte ausgeführt werden. Dies wäre sehr gefährlich. CGI-Skripte sollten in einem separaten Verzeichnis außerhalb Ihres DocumentRoot gespeichert werden, und nur in diesem Verzeichnis sollte die Option ExecCGI gesetzt sein. Dies ist die Voreinstellung, und der Standardspeicherort für CGI-Skripte ist /usr/lib/cgi-bin.

Includes Erlaubt serverseitige Includes. Server-seitige Includes erlauben es einer HTML-Datei, andere Dateien einzubinden. Weitere Informationen finden Sie in der Apache SSI-Dokumentation (Ubuntu Community).

IncludesNOEXEC Erlaubt serverseitige Includes, deaktiviert aber die Befehle #exec und #include in CGI-Skripten.

Indizes Zeigt eine formatierte Liste des Verzeichnisinhalts an, wenn kein DirectoryIndex (wie index.html) im angeforderten Verzeichnis existiert.

Vorsicht: Aus Sicherheitsgründen sollte diese Option normalerweise nicht gesetzt werden, und schon gar nicht für Ihr DocumentRoot-Verzeichnis. Aktivieren Sie diese Option nur dann für einzelne Verzeichnisse, wenn Sie sicher sind, dass die Benutzer den gesamten Inhalt des Verzeichnisses sehen sollen.

Multiview Unterstützt content-negotiated multiviews; diese Option ist aus Sicherheitsgründen standardmäßig deaktiviert. Siehe die Apache2-Dokumentation zu dieser Option.:

Apache2 Dokumentation

SymLinksIfOwnerMatch Folgt symbolischen Links nur, wenn die Zieldatei oder das Zielverzeichnis den gleichen Eigentümer wie der Link hat.

Einstellungen für den Apache2-Daemon

In diesem Abschnitt werden einige grundlegende Konfigurationseinstellungen für den Apache2-Dämon kurz erläutert.

LockFile

Die LockFile-Anweisung setzt den Pfad zum Lockfile, das verwendet wird, wenn der Server entweder mit USE_FCNTL_SERIALIZED_ACCEPT oder USE_FLOCK_SERIALIZED_ACCEPT kompiliert wird. Die Datei muss auf der lokalen Festplatte gespeichert sein. Es sollte auf dem Standardwert belassen werden, es sei denn, das Verzeichnis logs befindet sich auf einer NFS-Freigabe. Ist dies der Fall, sollte der Standardwert auf einen Ort auf der lokalen Festplatte und in ein Verzeichnis geändert werden, das nur von root lesbar ist.

PidFile Die Direktive PidFile legt die Datei fest, in der der Server seine Prozess-ID (pid) speichert. Diese Datei sollte nur von root lesbar sein. In den meisten Fällen sollte sie auf dem Standardwert belassen werden.

User Die User-Direktive legt die Benutzerkennung fest, die der Server zur Beantwortung von Anfragen verwendet. Diese Einstellung bestimmt den Zugriff des Servers. Alle Dateien, auf die dieser Benutzer keinen Zugriff hat, sind auch für die Besucher Ihrer Website unzugänglich. Der Standardwert für User ist „www-data“.

Warnung: Wenn Sie nicht genau wissen, was Sie tun, setzen Sie die Benutzeranweisung nicht auf root. Wenn Sie root als Benutzer verwenden, entstehen große Sicherheitslücken für Ihren Webserver.

Group Die Group-Direktive ist ähnlich wie die User-Direktive. Group legt die Gruppe fest, unter der der Server Anfragen beantworten soll. Die default-group ist ebenfalls „www-data“.

Apache2 Module

Ubuntu Docs: Server Module

Der Apache2 ist ein modularer Server. Dies bedeutet, dass nur die grundlegendsten Funktionen im Kernserver enthalten sind. Erweiterte Funktionen sind über Module verfügbar, die in den Apache2 geladen werden können.

Standardmäßig wird ein Basissatz von Modulen zur Kompilierungszeit in den Server aufgenommen. Wenn der Server so kompiliert ist, dass er dynamisch geladene Module verwendet, können die Module separat kompiliert und jederzeit mit der LoadModule-Anweisung hinzugefügt werden. Andernfalls muss der Apache2 neu kompiliert werden, um Module hinzuzufügen oder zu entfernen.

Ubuntu kompiliert Apache2 so, dass das dynamische Laden von Modulen möglich ist. Konfigurationsanweisungen können abhängig vom Vorhandensein eines bestimmten Moduls gemacht werden, indem sie in einen <IfModule>-Block eingeschlossen werden.

Bereits auf dem System vorhandene Module sind hinterlegt im Verzeichnis/etc/apache2/mods-available

Neue Module können installiert werden mit

sudo apt install <modul-name>
# example - python3 wsgi modul:
sudo apt install libapache2-mod-wsgi-py3

Sie werden mit der Installation automatisch aktiviert, können aber auch manuell aktiviert oder deaktiviert werden mit (Server-Neustart erforderlich):

# disable:
sudo a2dismod wsgi
# enable:
sudo a2enmod wsgi

# server restart needed:
sudo systemctl restart apache2

Apache2 für HTTPS konfigurieren

Das Modul mod_ssl fügt dem Apache2-Server eine wichtige Funktion hinzu – die Fähigkeit, die Kommunikation zu verschlüsseln. Wenn Ihr Browser also über SSL kommuniziert, wird das Präfix https:// am Anfang des Uniform Resource Locator (URL) in der Navigationsleiste des Browsers verwendet.

Das Modul mod_ssl ist im Paket apache2-common enthalten. Führen Sie den folgenden Befehl in einem Terminal aus, um das mod_ssl-Modul zu aktivieren:sudo a2enmod ssl

Es gibt eine Standard-HTTPS-Konfigurationsdatei in /etc/apache2/sites-available/default-ssl.conf. Damit der Apache2-Server HTTPS bereitstellen kann, werden außerdem ein Zertifikat und eine Schlüsseldatei benötigt. Die Standard-HTTPS-Konfiguration verwendet ein Zertifikat und einen Schlüssel, die mit dem Paket ssl-cert erzeugt wurden. Sie eignen sich gut zum Testen, aber das automatisch generierte Zertifikat und der Schlüssel sollten durch ein für die Website oder den Server spezifisches Zertifikat ersetzt werden.

Der folgende Befehl konfiguriert Apache2 für HTTPS: Anschließend ist ein Neustart erforderlich.sudo a2ensite default-ssl

# restart:
sudo systemctl restart apache2

Hinweis: Die Verzeichnisse /etc/ssl/certs und /etc/ssl/private sind die Standardspeicherorte. Wenn Sie das Zertifikat und den Schlüssel in einem anderen Verzeichnis installieren, müssen Sie SSLCertificateFile und SSLCertificateKeyFile entsprechend ändern.

Beachten Sie, dass Sie je nachdem, woher Sie Ihr Zertifikat bezogen haben, beim Neustart des Apache2 möglicherweise eine Passphrase eingeben müssen.

Sie können auf die sicheren Serverseiten zugreifen, indem Sie https://your_hostname/url/ in die Adressleiste Ihres Browsers eingeben.

Gemeinsame Schreibrechte

Damit mehrere Benutzer in dasselbe Verzeichnis schreiben können, müssen Sie einer Gruppe, der die Benutzer angehören, Schreibrechte erteilen. Im folgenden Beispiel wird der Gruppe „webmasters“ eine gemeinsame Schreibberechtigung für /var/www/html erteilt.

sudo chgrp -R webmasters /var/www/html

sudo chmod -R g=rwX /var/www/html/


Diese Befehle setzen rekursiv die Gruppenberechtigung für alle Dateien und Verzeichnisse in /var/www/html, um das Lesen, Schreiben und Durchsuchen von Verzeichnissen zu ermöglichen. Viele Administratoren finden dies nützlich, um mehreren Benutzern die Bearbeitung von Dateien in einem Verzeichnisbaum zu ermöglichen.

Warnung: Der apache2-Daemon wird als Benutzer www-data ausgeführt, der eine entsprechende Gruppe www-data hat. Diese sollten keinen Schreibzugriff auf Dokument-Root erhalten, da dies bedeuten würde, dass Angreifer durch Schwachstellen im Apache oder in den von ihm bedienten Anwendungen den bereitgestellten Inhalt überschreiben könnten.

Eine Webseite aufrufen

Geben Sie in der Adresszeile des Browsers http://localhost/ ein, wird der Inhalt der mit der Installation ausgelieferte Datei index.html angezeigt. Sie befindet sich im Verzeichnis /var/www/html.

Quellen

Ubuntu.com: Server
apache.org: Dokumentation