ubuntuusers.de

Apache

Hinweis:

Ab Ubuntu 13.10 befindet sich Apache 2.4 in den offiziellen Paketquellen. Der Inhalt dieses Artikels und viele Unterartikel beziehen sich größtenteils auf die Vorgängerversion 2.2, die für die LTS-Versionen 12.04 weiterhin gepflegt wurde.

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.

./apache_feather.gif Apache 🇬🇧 ist der meistgenutzte Webserver im Internet. In der Version 2 wurden besonders die Stabilität und die Geschwindigkeit des Servers verbessert. Über serverseitige Skriptsprachen wie PHP und CGI lassen sich auch dynamische Webseiten erstellen. Diese Sprachen und noch viele weitere Funktionen können über Module eingebunden werden. In Kombination mit MySQL und PHP oder Perl oder Python spricht man dann von einen LAMP-Server (Linux, Apache, MySQL 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 ist in den offiziellen Paketquellen von Ubuntu enthalten. Benötigt werden folgende Pakete[1]:

  • apache2 (ab Ubuntu 13.10 Apache 2.4, sonst 2.2)

  • apache2-doc (optional s.u.)

Befehl zum Installieren der Pakete:

sudo apt-get install apache2 apache2-doc 

Oder mit apturl installieren, Link: apt://apache2,apache2-doc

Wer PHP, CGI oder weitere Sprachen verwenden will, muss für diese Zusatzmodule noch weitere Pakete nachinstallieren.

Konfiguration

Der Apache Webserver lässt sich durch Editieren [3] der Dateien

  • /etc/apache2/apache2.conf

  • /etc/apache2/ports.conf

konfigurieren. Üblicherweise muss man hier nichts von Hand bearbeiten, es sei denn, man benötigt spezielle Konfigurationen.

Hinweis:

Standardmäßig sind Verzeichnislisten eingeschaltet. In vielen Fällen ist dies unerwünscht. Dann empfiehlt es sich, dies global auszuschalten, und nur für bestimmte Verzeichnisse zu erlauben in .htaccess-Dateien.

In der zutreffenden conf-Datei muss entweder ein Abschnitt mit Options Indexes ... auskommentiert werden, oder hinzugefügt werden Options -Indexes. Es gibt sehr viele Informationen dazu im Internet, allerdings beschreiben nur die wenigsten, dass nicht etwa httpd.conf o.ä. bearbeitet werden muss, sondern die Datei im Unterordner /etc/apache2/sites-enabled.

Auf lokales System beschränken

Befindet sich der Rechner mit dem Server direkt im Internet - also nicht hinter einem Router - oder sollen andere Rechner aus dem lokalen Netzwerk nicht auf den Webserver zugreifen, so kann man den Zugriff über die /etc/apache2/ports.conf steuern. Trägt man z.B. anstelle von

1
Listen 80

die Zeile

1
Listen localhost:80

ein und startet den Webserver neu, so kann man den Webserver nur noch lokal ansprechen.

Sollte man versuchen, über die WAN-IP oder über eine z.B. per DynDNS 🇬🇧 angelegte Domain auf den Server zu kommen, wird dies eventuell scheitern. Das kann daran liegen, dass der Router kein "NAT Loopback" unterstützt oder dieses nicht eingeschaltet ist. Stattdessen kann man die Verfügbarkeit aus dem Internet z.B. mit einem Dienst wie Anonymouse.org 🇬🇧 testen.

Virtuelle Hosts anlegen

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.

Webseiten ablegen und aufrufen

Systemweit

Die Inhalte für den Server werden in einem als "document root" oder auch als "Webroot" bezeichneten Verzeichnis abgespeichert. Dies bedeutet, dass der Apache Webserver dort nach den auszuliefernden (HTML-)Dateien schaut. Je nach Apache- bzw. Ubuntu-Version ist das der folgende Ordner:

  • Apache 2.4 (ab Ubuntu 13.10): /var/www/html/

  • Apache 2.2 (bis Ubuntu 13.04): /var/www/

Legt man dort Dateien ab, so können diese mit

http://localhost/ bzw. http://SERVER-IP_ODER_NAME

im Browser aufgerufen werden. Standardmäßig ist hier bereits eine einfache Demoseite index.html installiert, was für das Testen der Grundkonfiguration praktisch ist. Möchte man das "document root" ändern, kann man einen "virtuellen Host" verwenden (siehe oben).

Rechte

Falls bei einem Mehrbenutzersystem bestimmten Personen Schreibrechte für die in "document root" enthaltenen Dateien gegeben werden soll, sollte dafür eine Gruppe angelegt werden. Dies ist nicht notwendig, wenn nur ein Mitglied der Gruppe sudo (früher admin) Inhalte erstellen oder bearbeiten soll. Diese können mit dem Befehl sudo Datei-Operationen ausführen.

Soll Nutzern 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 [5]. Beispiel für Apache 2.2:

sudo groupadd www
sudo adduser BENUTZERNAME www
sudo chgrp www /var/www
sudo chmod g+w /var/www 

Damit die neuen Rechte greifen, muss man sich einmal ab- und neu anmelden oder den Befehl newgrp verwenden.

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".

Benutzerspezifisch

Darüber hinaus können auch die einzelnen Benutzer des Rechners innerhalb ihres Homeverzeichnisses Webseiten im Unterordner ~/public_html speichern. Dieser wird automatisch vom Webserver eingebunden und ist unter der URL

http://localhost/~username/ bzw. http://SERVER-IP_ODER_NAME/~username/

zu erreichen.

Das hierfür nötige Modul mod_userdir wird bei der Installation von Apache mit installiert. Es muss nur noch mit dem einmaligen Befehl [2]

sudo a2enmod userdir # Aktivieren des Moduls
sudo /etc/init.d/apache2 reload # Neuladen der Apache Konfiguration 

aktiviert werden. Danach muss man noch in der Konfigurationsdatei /etc/apache2/mods-available/userdir.conf den Pfad eventuell anpassen, andernfalls kann es passieren, dass die Seite nicht angezeigt wird.

1
2
3
4
5
<IfModule mod_userdir.c>
        UserDir /home/*/public_html
        UserDir disabled root
...
</IfModule>

Nun kann im jeweiligen Benutzer- bzw. Homeverzeichnis der Unterordner ~/public_html erstellt werden. In diesem können dann die Dateien abgelegt werden. Der übergeordnete Ordner /home/BENUTZERNAME/ braucht außerdem die Rechte 755, damit der Webserver überhaupt auf diesen Unterordner zugreifen kann.

Dabei muss man grundsätzlich beachten, dass der Benutzer www-data, unter dem Apache läuft, auf die Dateien zugreifen kann. Daher müssen die Leserechte u.U. nach dem Kopieren überprüft werden. Schreibrechte sollten nur dort gesetzt werden, wo der Webserver auch wirklich schreiben muss. Zu freizügig gesetzte Schreibrechte stellen eine Sicherheitslücke dar. Mehr zu Thema Dateirechte findet man unter "Rechte" [5].

Hinweis:

Auch der Ordner ~/public_html/ braucht die Zugriffsrechte 755, während Dateien innerhalb des Ordners meist auf 644 gesetzt werden. Dateien, die der Webserver z.B. durch ein installiertes CMS in diesem Verzeichnis erzeugt oder ändert, sind anschließend nur noch für Mitglieder der Gruppe www-data schreibbar! Um diese Dateien auch selbst bearbeiten zu können, den jeweiligen Benutzer zu dieser Gruppe hinzufügen (siehe oben).

Möchte man PHP nutzen, darf dies natürlich nicht abgeschaltet sein. Deshalb muss noch php_admin_value in der Datei /etc/apache2/mods-enabled/php5.conf auskommentiert werden:

1
2
3
4
5
    <IfModule mod_userdir.c>
        <Directory /home/*/public_html>
#            php_admin_value engine Off
        </Directory>
    </IfModule>

⚓︎

Apache steuern

Wie alle anderen Dienste bringt Apache Start/Stop-Skripte mit. Diese Skripte lassen sich natürlich auch zum Kontrollieren des Webservers gebrauchen.

sudo /etc/init.d/apache2 
  • 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

  • sudo update-rc.d -f apache2 remove - Apache2 aus der Autostartliste entfernen

  • sudo update-rc.d apache2 defaults - Apache2 wieder der Autostartliste hinzufügen

Beispiel:

sudo /etc/init.d/apache2 restart 

Experten-Info:

Alternativ kann man auch den Befehl apache2ctl benutzen, der allerdings etwas andere Optionen nutzt als das oben beschriebene Init-Skript. Da die Nutzung des Init-Skripts aber der Ubuntu/Debian-konforme Weg ist, wird hier apache2ctl nicht weiter beschrieben.

Module/Erweiterungen

Der Apache Server lässt sich über Module erweitern. Weiterführende Informationen sind im Artikel Apache/Module zu finden.

Problembehebung

Fehlender Hostname

Sollte man beim Starten oder Stoppen des Servers folgenden Hinweis

Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

bekommen, so kann man in /etc/apache2/apache2.conf folgendes eintragen:

1
ServerName localhost

Der Hinweis kann jedoch auch einfach ignoriert werden.

Falscher Zeichensatz bei Formularen

Falls es z.B. bei der Übertragung von Formulardaten Probleme mit dem Zeichensatz geben sollte, kann die Lösung darin bestehen, den Standardzeichensatz in der Datei /etc/apache2/conf.d/charset von UTF-8 auf ISO-8859-1 zu ändern (als root) und dann den Apache-Server neu zu starten.

Welcher Zeichensatz von PHP verwendet wird, kann mit folgendem PHP-Code überprüft werden:

1
2
3
<?
phpinfo();
?>

Unter "HTTP Headers Information → HTTP Response Headers → Content-Type → charset" findet man die benötigte Information (siehe auch PHP testen).

mod_userdir ab Ubuntu 10.04

Falls PHP Dateien bei Nutzung von mod_userdir heruntergeladen statt angezeigt werden, ist die Datei /etc/apache2/mods-available/php5.conf bzw. /etc/apache2/mods-available/php4.conf wie folgt anzupassen (siehe 545739):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<IfModule mod_php5.c>
    <FilesMatch "\.ph(p3?|tml)$">
	SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
	SetHandler application/x-httpd-php-source
    </FilesMatch>
    # To re-enable php in user directories comment the following lines
    # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
    # prevents .htaccess files from disabling it.
    #<IfModule mod_userdir.c>
    #   <Directory /home/*/public_html>
    #      php_admin_value engine Off
    #   </Directory>
    #</IfModule>
</IfModule>

Die Zeilen von inkl. <IfModule mod_userdir.c> bis inkl. </IfModule> müssen mit Kommentarzeichen (#) versehen werden.

Apache Prozesse analysieren

Falls ein oder mehrere Prozesse eine hohe CPU-Last generieren, kann man diese mit dem Modul mod_status analysieren. Das Modul ist standardmäßig aktiv, aber nur für den lokalen Zugriff konfiguriert. Weiterhin ergibt es Sinn den ExtendedStatus auf "On" zu setzen (man sieht mehr; z.B. aufgerufene URL, die der Prozess abarbeitet).

Dazu editiert man die Datei /etc/apache2/mods-enabled/status.conf:

1
2
3
4
5
ExtendedStatus On
<IfModule mod_status.c>
# ...
Allow from localhost ip6-localhost ip.des.admin.pc
# ...

Nach dem Editieren der Datei muss die Konfiguration neu eingelesen werden.

sudo /etc/init.d/apache2 reload # Neuladen der Apache Konfiguration 

Danach kann man über die URL http://SERVER-IP_ODER_NAME/server-status die Prozessliste mit Details ansehen.

Diese Revision wurde am 4. Mai 2017 18:24 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, Server, Internet, Apache