Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Der Apache
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).
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.
Apache 2.2 ist direkt in den Paketquellen von Ubuntu enthalten, benötigt werden folgende Pakete[1]:
apache2
apache2-doc (optional s.u.)
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.
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 .
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.
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.
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.
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.
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.
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.
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/.
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].
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).
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.
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.
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 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 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
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.
Im Wiki werden noch weitere Module behandelt, und zwar in den folgenden Unterartikeln:
Apache/SSI - "Server Side Includes" nutzen
Apache/SSL - Verschlüsselte SSL-Verbindungen aufbauen
Apache/mod rewrite - Angeforderte URLs umschreiben
Apache/mod proxy html - Apache als Zwischenproxy benutzen
Apache/mod dav - Apache als WebDAV-Server
Apache/Sicherheit Übersichtsseite zu Sicherheitsmodulen für den Webserver Apache
Apache/mod security - Zugriffskontrolle basierend auf einer Mustererkennung
Apache/mod security lucid - dito, aber für Ubuntu 10.04
Apache/mod evasive - Erkennung von DoS- und DDoS-Attacken
Apache/mod spamhaus - Zugriffskontrolle anhand einer DNS-based Blackhole List (DNSBL)
Apache/mod geoip2 - Zugriffskontrolle basierend auf dem Ursprungsland
Apache kann über Avahi seine Dienste im lokalen Netzwerk publizieren. Dazu muss das Paket
libapache2-mod-dnssd (universe)
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.
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.
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.
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
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.
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.
ApacheMySQLPHP - eine sehr gute Anleitung im Ubuntu-Wiki u.a. mit Hilfe zur Absicherung des lokalen Testservers und weiteren Seiten
MySQL - Hilfe bei Installation und Konfiguration