ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.

Apache

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

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

./apache-logo.gif Der Apache {en} HTTP-Server 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 bzw. Perl spricht man dann von einen LAMP-Server (Linux, Apache, MySQL und PHP/Perl).

Hinweis:

Der häufig empfohlene "LAMP"-Server 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.2 ist direkt in den Paketquellen von Ubuntu enthalten, benötigt werden folgende Pakete[1]:

  • apache2

  • 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 und noch weitere Sprachen verwenden will, muss für diese Zusatzmodule noch Pakete nachinstallieren.

Experten-Info:

Apache 2.4 ist derzeit weder in den Paketquellen enthalten noch über ein PPA erhältlich. Anleitungen zur manuellen Installation unter Ubuntu lassen sich im Internet finden {de}.

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 / Wikis ... laufen. Wie dies funktioniert ist im Artikel Virtual Hosts erklärt.

Webseiten ablegen und aufrufen

Systemweit

Das „DocumentRoot”-Verzeichnis des Apache Webservers liegt in /var/www/. Dies bedeutet, dass der Apache Webserver dort nach den auszuliefernden (HTML-)-Dateien schaut. Legt man dort Dateien ab, so können diese mit

http://localhost/ bzw. http://<server-ip>

im Browser aufgerufen werden. Standardmäßig ist hier bereits eine einfache Demoseite installiert, was für das Testen der Grundkonfiguration praktisch ist.

Rechte

Falls in einem Mehrbenutzer System Personen Schreibrechte für die html Dateien gegeben werden soll, sollte dafür eine Gruppe angelegt werden. Dies ist nicht notwendig, wenn dort nur ein Mitglied der „admin” Gruppe Inhalte platzieren soll. Diese können mit sudo Dateien dort hin kopieren.

Soll Nicht-Admins Schreibzugriff gewährt werden, muss dafür eine Gruppe angelegt werden. Dies ist in dem Beispiel die Gruppe www. Dieser Name kann aber frei vergeben werden. Dieser Gruppe können Schreibrechte auf den /var/www/ Ordner gegeben werden und die Nutzer hinzufügt werden. [5]

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.

Hinweis:

Es sollte nicht die „www-data“ Gruppe genutzt werden. Unter dieser Gruppe läuft der Apache Webserver und sollte ein Angreifer eine Lücke in dem Apache finden, so erhält er unnötigerweise Schreibrechte im Verzeichnis /var/www/.

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>/~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 Konfiguration den Pfad eventuell anpassen, andernfalls kann es passieren, dass die Seite nicht angezeigt wird.

  • /etc/apache2/mods-enabled/userdir.conf

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

Apache Server steuern

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

# Allgemein
sudo /etc/init.d/apache2 {start|stop|restart|reload|force-reload}
# Beispiel
sudo /etc/init.d/apache2 restart 
  • 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

Mehr dazu im Wiki unter Dienste.

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.

Bei Problemen siehe auch PHP-Datei wird nicht ausgeführt und mod-userdir ab Ubuntu 10.04.

Python

Python kann ebenfalls als Modul in den Apache Webserver eingebunden werden. Das Python-Paket ist in der Standardinstallation von Ubuntu enthalten, es muss zusätzlich noch das folgende Paket installiert werden.

  • libapache2-mod-wsgi

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install libapache2-mod-wsgi 

sudo aptitude install libapache2-mod-wsgi 

Anschließend muss das Modul noch aktiviert werden. Dies geschieht am einfachsten mit den folgenden Befehlen im Terminal [2]:

sudo a2enmod wsgi 

Nun muss man mit einem Editor mit Root-Rechten [4] die Datei /etc/apache2/sites-available/default wie folgt editieren:

Ziemlich am Anfang der Datei steht

1
2
3
<Directory /var/www>
...
</Directory>

Zwischen diese Direktive fügt man folgenden Text ein:

1
WSGIScriptAlias /alias /pfad/zu/myapp.wsgi

Nach einem Neustart des Apache-Servers steht das Modul zur Verfügung.

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.

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 seine Dateien 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 zu downloaden.

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://servername.domain/server-status die Prozessliste mit Details ansehen.

ubuntuusers.local › WikiApache