{{{#!vorlage Hinweis Ab [:Saucy: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. }}} [[Vorlage(archiviert)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:sudo: Root-Rechte] [:Rechte: Rechte für Dateien und Ordner ändern] }}} [[Inhaltsverzeichnis(1)]] [[Bild(./apache_feather.gif, 96, align=left)]] [http://httpd.apache.org/ 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 ('''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 ist in den offiziellen Paketquellen von Ubuntu enthalten. Benötigt werden folgende Pakete[1]: {{{#!vorlage Paketinstallation apache2, ab [:Saucy:Ubuntu 13.10] Apache 2.4, sonst 2.2 apache2-doc, optional s.u. }}} 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. {{{#!vorlage 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 {{{#!code apache Listen 80 }}} die Zeile {{{#!code apache Listen localhost:80 }}} ein und [:Apache#Apache-steuern: 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 [https://www.dyndns.com/ 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 [http://anonymouse.org/ 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" 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 [#Virtuelle-Hosts-anlegen (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: {{{#!vorlage Befehl 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. {{{#!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". }}} == Benutzerspezifisch == Darüber hinaus können auch die einzelnen Benutzer des Rechners innerhalb ihres [:Homeverzeichnis: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] {{{#!vorlage Befehl 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. {{{#!code apache UserDir /home/*/public_html UserDir disabled root ... }}} 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]. {{{#!vorlage 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 ([#Rechte 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: {{{#!code apache # php_admin_value engine Off }}} [[Anker(Steuerung)]] = Apache steuern = Wie alle anderen [:Dienste:] bringt Apache Start/Stop-Skripte mit. Diese Skripte lassen sich natürlich auch zum Kontrollieren des Webservers gebrauchen. {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo /etc/init.d/apache2 restart }}} {{{#!vorlage Experten 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 [bug:61793: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: {{{#!code apache 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: {{{#!code php }}} Unter ''"HTTP Headers Information -> HTTP Response Headers -> Content-Type -> charset"'' findet man die benötigte Information (siehe auch [:LAMP#PHP-testen: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 [bug:545739:]): {{{#!code apache SetHandler application/x-httpd-php SetHandler application/x-httpd-php-source # To re-enable php in user directories comment the following lines # (from to .) Do NOT set it to On as it # prevents .htaccess files from disabling it. # # # php_admin_value engine Off # # }}} Die Zeilen von inkl. `` bis inkl. `` 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''': {{{#!code apache ExtendedStatus On # ... Allow from localhost ip6-localhost ip.des.admin.pc # ... }}} Nach dem Editieren der Datei muss die Konfiguration neu eingelesen werden. {{{#!vorlage Befehl 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. = Links = * [http://httpd.apache.org/docs/ Offizielle Dokumentation] {en} * [ubuntu_doc:community/ApacheMySQLPHP:Apache MySQL PHP] {en} - eine sehr gute Anleitung im Ubuntu-Wiki u.a. mit Hilfe zur Absicherung des lokalen Testservers und weiteren Seiten * [ubuntu_doc:community/LocalhostSubdomain:Einrichten von Subdomains auf dem Localhost] {en} * [https://thomas-leister.de/internet/datenschutz-apache-logfiles-anonymisieren-oder-abschalten/ Blogpost] {de} zum Anonymisieren und Abschalten der Log-Dateien * [:Serverdienste:] {Übersicht} weitere Webserver # tag: Internet, Netzwerk, Server, Apache