ubuntuusers.de

ubuntuusers.deWikiApache

Apache

Hinweis:

Ab Ubuntu 13.10 befindet sich die Version 2.4 von Apache 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 und 10.04 weiterhin gepflegt wird.

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

./apache_feather.gif Apache {en} 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.)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install apache2 apache2-doc 

sudo aptitude install 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 {en} 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 {en} 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" 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-enabled/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

Apache lässt sich über sogenannte Module erweitern. Es gibt eine Vielzahl von Modulen mit allen möglichen Funktionen. Zum Teil werden die Module direkt von den Apache-Entwicklern bereit gestellt; es gibt aber auch viele gute Module, welche von Dritten bereitgestellt werden. Je nach Modul variieren Installation und Konfiguration etwas, so dass man am besten in der jeweiligen Dokumentation nachliest.

Im Folgenden werden einige Module vorgestellt.

PHP

PHP {en} ist eine Skriptsprache mit einer an Perl angelehnten Syntax, die hauptsächlich zur Erstellung dynamischer Webseiten oder ganzer Webanwendungen verwendet wird. Die Installation von PHP und des Apache-Moduls ist im Artikel PHP beschrieben.

Falls die Einbindung nicht wie erwartet funktioniert, siehe auch den Abschnitt Problembehebung weiter unten.

Weitere Module

Im Wiki werden noch weitere Module behandelt, und zwar in den folgenden Unterartikeln:

mod-dnssd

Apache kann über Avahi seine Dienste im lokalen Netzwerk publizieren. Dazu muss das Paket

  • libapache2-mod-dnssd (universe)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install libapache2-mod-dnssd 

sudo aptitude install libapache2-mod-dnssd 

installiert werden. Nachdem man nun das Modul über

sudo a2enmod mod-dnssd 

aktiviert und den Webserver neu gestartet hat, zeigen Browser wie beispielsweise Epiphany Webseiten im lokalen Netzwerk als "lokale Seiten" automatisch in den Lesezeichen an.

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

PHP-Datei wird nicht ausgeführt

Falls der Webbrowser fragt, ob eine php-Datei heruntergeladen werden soll, anstatt sie anzuzeigen, so ist das php-Modul evtl. nicht korrekt aktiviert. Um dies zu korrigieren, führt man in einem Terminal [2] den Befehl

sudo a2enmod php5        # für PHP5 bzw.
sudo a2enmod php4        # für PHP4 

aus und startet anschließend den Webserver neu. Am besten löscht man anschließend auch gleich den Browsercache.

Hat man ein benutzerspezifisches Verzeichnis ~/public_html/ für eigene Webseiten angelegt, siehe mod_userdir ab Ubuntu 10.04. Sollte sich die PHP-Datei auf dem lokalen System befinden, ist darauf zu achten, das sie mit http:// (z.B. http:///var/www/index.php) aufgerufen wird. Beim Öffnen per Doppelklick geht der Browser den Weg über file:// (file:///var/www/index.php) und versucht die Datei herunterzuladen.

Weiterhin ist darauf zu achten, dass die PHP-Dateien als "executable" (x) markiert sind. Dazu kann man in das Verzeichnis der Webseite (bzw. der Anwendung) wechseln und folgenden Befehl anwenden:

sudo chmod -R o+x *.php 

mod_userdir ab Ubuntu 10.04

Falls PHP Dateien bei Nutzung von mod_userdir ab Ubuntu 10.04 Lucid Lynx 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. Weiter macht 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 13. Dezember 2014 18:52 von aasche erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, Server, Internet, Apache, Apache-Projekt