[[Vorlage(Getestet, focal, jammy )]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Programme_starten: Starten von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:Editor:Einen Editor starten] }}} [[Inhaltsverzeichnis(2)]] [[Bild(./apache_feather.gif, 96, align=left)]] [https://httpd.apache.org/ Apache] {en} ist der meistgenutzte Webserver im Internet. Er ist flexibel konfigurierbar und über eine Vielzahl von [#Module Modulen] erweiterbar. In Kombination mit [:MySQL:] und [:PHP:] oder [:Perl:] oder [:Python:] spricht man dann von einen LAMP-Server ('''L'''inux, '''A'''pache, '''M'''ySQL und '''P''' wie PHP, Perl oder Python). Der häufig empfohlene [:XAMPP:] bereitet unter Ubuntu immer wieder Probleme. Da Ubuntu (fast) alle in XAMPP enthaltenen Serverdienste auch über die offiziellen Paketquellen bereitstellt, sollten bevorzugt die Einzelpakete genutzt werden. Eine Kurzanleitung dazu findet sich im Artikel [:LAMP:]. = Installation = Apache 2.4 ist in den offiziellen Paketquellen von Ubuntu enthalten und kann über das folgende Paket installiert werden [1]: {{{#!vorlage Paketinstallation apache2 }}} Es wird Apache 2.4 installiert. Die Auswahl einer anderen Version ist nicht möglich. Wer die englischsprachige Dokumentation lokal installieren möchte, kann ein weiteres Paket nutzen: {{{#!vorlage Paketinstallation apache2-doc, optional }}} = Benutzung = Nach der Installation ist der Apache-Server sofort einsatzbereit und läuft auf '''localhost''' auf Port 80 (dem Standardport des HTTP-Protokolls). In der Ausgangskonfiguration wird der Server bei jedem Systemstart automatisch mit gestartet. Wie der automatische Start deaktiviert wird, im Abschnitt [#Apache-steuern Apache steuern] erklärt. == Webseiten ablegen und aufrufen == Die Inhalte für den Server werden in einem als "document root" bezeichneten Verzeichnis abgespeichert. Dies bedeutet, dass der Apache Webserver dort nach den auszuliefernden (HTML-)Dateien schaut. Bei Apache 2.4 lautet das Verzeichnis: * '''/var/www/html/''' Legt man dort Dateien ab, so können diese mit `http://localhost/` bzw. `http://SERVER-IP_ODER_NAME/` im Browser aufgerufen werden. Dort wird bei der Installation des Servers die Seite '''index.html''' abgelegt, eine HTML-Testseite, welche jetzt im Browser zu sehen sein sollte, so wie hier unter Firefox: [[Bild(apache-index-default-datei.png, 700, alt="Screenshot localhost unter Apache 2.4", title="Die von Apache 2.4 standardmäßig eingerichtete index.html, aufgerufen in Firefox" align=center)]] Möchte man mehrere verschieden Webseiten über den Server ausliefern - was problemlos möglich ist - dann konfiguriert man dafür in der Regel verschiedene "virtual hosts", wie im Artikel [:Apache/Virtual Hosts:] erklärt wird. == Apache steuern == Wie alle anderen [:Dienste:] bringt Apache Start/Stop-Skripte mit. Diese Skripte lassen sich natürlich auch zum Kontrollieren des Webservers gebrauchen. Im Terminal[3] kann der Server über {{{#!vorlage Befehl sudo service apache2 BEFEHL }}} gesteuert werden, wobei `BEFEHL` die folgenden Werte haben kann: * `start` - startet den Webserver * `stop` - stoppt den Server * `restart` - startet den Server neu, bestehende Verbindungen auf den Server werden gekappt * `reload` - lädt die Konfigurationsdateien neu, ohne dass Verbindungen getrennt werden * `force-reload` - Lädt die Konfigurationsdateien neu, auch wenn dabei Verbindungen getrennt werden müssen {{{#!vorlage Experten Alternativ kann man auch das Programm '''apache2ctl''' benutzen, der allerdings etwas andere Optionen nutzt als das oben beschriebene service Programm. Da die Nutzung von service aber der Ubuntu/Debian-konforme Weg ist, wird hier '''apache2ctl''' nicht weiter beschrieben. }}} Per Voreinstellung startet der Server bei jedem Systemstart automatisch mit. Dieses Verhalten kann mit dem Befehl [:systemctl:] verändert werden. Details findet man unter [:systemd/Units/#Selbst-angelegte-Units-aktivieren:] == Konfiguration == Die zentrale Konfigurationsdatei des Server ist '''apache2.conf''' im Verzeichnis '''/etc/apache2'''. Diese muss in der Regel allerdings nicht bearbeitet werden, da zusätzliche Konfigurationen in separaten Dateien angelegt werden können. Diese Dateien liegen im Verzeichnis '''/etc/apache2/conf-available'''. Hierbei handelt es um Textdateien, welche mit einem Editor mit Root-Rechten[4][5] mit Root-Rechten angelegt bzw. editiert werden können. Der Name der Datei darf beliebig sein, aber die Dateiendung muss '''.conf''' lauten. Die gültigen Direktiven, welche in den Konfigurationsdateien verwendet werden dürfen, sind in der [https://httpd.apache.org/docs/current/de/configuring.html Apache Dokumentation] {de} erläutert. Zum Aktivieren der Konfiguration muss die '''.conf'''-Datei noch aktiviert werden. Dies geschieht mit dem Befehl[3][4]: {{{#!vorlage Befehl sudo a2enconf NAME_DER_DATEI.conf }}} Die Deaktivierung erfolgt entsprechend mit: {{{#!vorlage Befehl sudo a2disconf NAME_DER_DATEI.conf }}} == Rechte == Falls bei einem Mehrbenutzersystem bestimmten Personen Schreibrechte für die in "document root" enthaltenen Dateien gegeben werden sollen, sollte dafür eine Gruppe angelegt werden. Dies ist nicht notwendig, wenn nur ein Mitglied der Gruppe `sudo` Inhalte erstellen oder bearbeiten soll. Diese können mit dem Befehl [:sudo:] Datei-Operationen ausführen. Soll einem Nutzer ohne Root-Rechte Schreibzugriff gewährt werden, muss dafür eine Gruppe angelegt werden. Dies ist im folgenden Beispiel die Gruppe `www`. Dieser Name kann aber frei vergeben werden. Dieser Gruppe können Schreibrechte auf den "document root"-Ordner gegeben werden und die Nutzer hinzufügt werden [3]. {{{#!vorlage Befehl sudo groupadd www sudo adduser BENUTZERNAME www sudo chgrp www /var/www/html sudo chmod g+w /var/www/html sudo find /var/www/html -type d -exec chmod g+s {} \; }}} Damit die neuen Rechte greifen, muss man sich einmal ab- und neu anmelden oder den Befehl [:newgrp:] verwenden. {{{#!vorlage Hinweis Die bestehende Gruppe `www-data` sollte nicht genutzt werden. Mit den Rechten dieser Gruppe läuft der Apache Webserver und sollte ein Angreifer eine Lücke in Apache finden, so erhält er unnötigerweise Schreibrechte im "document root". }}} = Virtual Hosts = Auf einem Apache-Webserver mit (nur) einer IP-Adresse können durchaus mehrere unabhängige Homepages, Blogs oder Wikis bereitgestellt werden. Wie dies funktioniert, ist im Artikel [:Apache/Virtual Hosts:] erklärt. = Module = Der Apache Server lässt sich über Module erweitern. Zu den Modulen zählt auch das Einbinden von [:PHP:]. Weiterführende Informationen sind im Artikel [:Apache/Module:] zu finden. = Problembehebung = == Starten scheitert durch fehlendes LOG-Verzeichnis == Sollte '''/var/log/''' nicht verfügbar sein (zum Beispiel durch ein temporäres Verzeichnis - siehe [:Tuning#Temporaere-Dateien:]) wird ein Starten des Daemons abgebrochen. {{{ * Starting web server apache2 * * The apache2 configtest failed. Output of config test was: (2)No such file or directory: AH02291: Cannot access directory '/var/log/apache2/' for error log of vhost defined at /etc/apache2/sites-enabled/NAME-DES-VIRTEULLEN-HOSTS.conf:1 (2)No such file or directory: AH02291: Cannot access directory '/var/log/apache2/' for error log of vhost defined at /etc/apache2/sites-enabled/000-default.conf:1 AH00014: Configuration check failed Action 'configtest' failed. The Apache error log may have more information. }}} Lösen kann man dieses Problem, in dem man die Apache-Logs ohne Unterordner unter '''/var/log/''' ablegt. Hierzu ist eine Anpassung der Umgebungsvariablen von Apache unter '''/etc/apache2/envvars''' erforderlich. Zur Anpassung sind Root-Rechte erforderlich[4][5]. In folgender Zeile muss `apache2` entfernt werden. {{{#!vorlage Befehl export APACHE_LOG_DIR=/var/log/apache2$SUFFIX ## nachher export APACHE_LOG_DIR=/var/log/$SUFFIX }}} Zudem sollte man das Apache-Log umbenennen, ansonsten könnte die Datei überschrieben werden, was eine Rückverfolgbarkeit verhindert. Hierzu ist ebenfalls mit Root-Rechten die Datei '''/etc/apache2/apache2.conf''' anzupassen {{{#!vorlage Befehl sudoedit -H /etc/apache2/apache2.conf }}} und das zu erstellende Log-File umzubenennen. Leerstellen im Dateinamen werden nicht unterstützt. {{{#!vorlage Befehl ErrorLog ${APACHE_LOG_DIR}/error.log #Nachher ErrorLog ${APACHE_LOG_DIR}/apache-error.log }}} Zusätzlich sollten die Log-Namen der virtuellen Hosts angepasst werden, um ebenfalls ein Überschreiben zu verhindern. Der Name der Datei '''/etc/apache2/sites-enabled/NAME-DES-VIRTUELLEN-HOSTS.conf'''' ist entsprechend anzupassen[4][5] {{{#!vorlage Befehl #Vorher ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # Nachher ErrorLog ${APACHE_LOG_DIR}/apache-NAME-DES-VIRTUELLEN-HOSTS-error.log CustomLog ${APACHE_LOG_DIR}/apache-NAME-DES-VIRTUELLEN-HOSTS-access.log combined }}} Die Dateinamen der Logs sind nur Empfehlungen, für das System ist es irrelevant, wie die LOG-Datei heißt. = Links = * [https://httpd.apache.org/ Projektseite] {en} * [https://httpd.apache.org/docs/2.4/ Offizielle Dokumentation] {en} * [https://httpd.apache.org/docs/2.4/new_features_2_4.html Apache 2.4 - New features] {en} * [https://httpd.apache.org/docs/2.4/upgrading.html Upgrading to 2.4 from 2.2] {en} * [https://www.linode.com/docs/security/upgrading/updating-virtual-host-settings-from-apache-2-2-to-apache-2-4 Updating Virtual Host Settings from Apache 2.2 to Apache 2.4] {en} - Blogbeitrag, 03/2014 * [:Serverdienste:] {Übersicht} weitere Webserver #tag: Netzwerk, Internet, Server, Apache