Lokale Webseiten mit Apache

Lokale Webseiten mit Apache

Wer Webseiten einrichtet, Testumgebungen betreibt oder Webanwendungen bertreibt, wird um einen lokalen Webserver nicht herumkommen. Unter Debian (verwendete Version Debian 7 mit Gnome) ist das mit wenigen Commands erledigt. In diesem Tutorial wird die Installation des Webservers erklärt, wie man ihn dazu bringt, auch auf das für normale User leicht nutzbare Verzeichnis ~/public_html zuzugreifen, dort php auszuführen und schlussendlich auch, wie man lokale Domains anlegt.

ACHTUNG: Diese Anleitung ist nicht für Rechner bzw. Server geeignet, deren Webserver vor Zugriffen aus dem Internet nicht geschützt sind! Die hier beschriebene Konfiguration ist eine Entwicklungsumgebung. Offene WLANs können ein Risikofaktor sein.

Installation des Webservers

Zuerst muss der Webserver, hier ein Apache 2, installiert werden: apt-get install apache2

Wer später auch PHP, MySQL und Co nutzen möchte nimmt folgenden Befehl:
apt-get install apache2 php5 mysql-server wird im Terminal als Root ausgeführt und mit s + ENTER bestätigen. Damit ist der Webserver installiert. Bei MySQL muss auch ein Passwort angelegt werden. Für dieses Passwort sollten nur Zeichen des englischen Sprachraumes genutzt werden. Das Passwort gut merken :D

userdir-Mod aktivieren

Nun geht es daran, das Verzeichnis ~/public_html im Browser aufrufbar zu machen.
Dafür erstellst Du zuerst den Ordner public_html in Deinem /home Ordner und gibst ihm anschließend die nötigen Berechtigungen, um dem Webserver den Zugriff zu erlauben. Diesen Befehl als normaler User ausführen. mkdir ~/public_html && chmod 0755 ~/public_html

Mit dem Befehl a2enmod wird das Apache2 userdir Modul aktiviert. Der Befehl erstellt einen symlink auf /etc/apache2/mods-available/userdir.load und /etc/apache2/mods-available/userdir.conf im Ordner /etc/apache2/mods-enable/ . Den Befehl als Root ausführen a2enmod userdir Anschließend wird der Apache daemon neu gestartet (Root User) service apache2 restart

Jetzt sollte eine im Verzeichnis /home/~USERNAME/public_html abgelegte Webseite über den Browser Deines Vertrauens abrufbar sein.

PHP im Homeverzeichnis aktivieren

Dieser Schritt ist nur notwendig, wenn man PHP nutzen möchte. Ansonsten kann man den Folgenden Schritt überspringen.

Normalerweise ist PHP im Homeverzeichnis deaktiviert, sodass alle .php-Dateien als mime-type Application/octet-stream behandelt werden und bei Aufruf der Datei heruntergeladen werden.

Mit nano /etc/apache2/mods-available/php5.conf, ausgeführt als Root, wird die PHP-Konfigurationsdatei geöffnet und die Zeile php_admin_value engine Off auskomentiert, also die Raute vor Beginn des Textes entfernt.

Unter Debian 8 sieht das ein wenig anders aus, hier muss folgende Änderung vorgenommen werden:

Vorher:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
    SetHandler application/x-httpd-php-source
    # Deny access to raw php sources by default
    # To re-enable it's recommended to enable access to the files
    # only in specific virtual host or directory
    Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
    Require all denied
</FilesMatch>

# Running PHP scripts in user directories is disabled by default
#
# 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_flag engine Off
    </Directory>
</IfModule>

Nachher:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
    SetHandler application/x-httpd-php-source
    # Deny access to raw php sources by default
    # To re-enable it's recommended to enable access to the files
    # only in specific virtual host or directory
    Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
    Require all denied
</FilesMatch>

# Running PHP scripts in user directories is disabled by default
#
# 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_flag engine Off
#     </Directory>
#</IfModule>

Wie auch in der Konfigurationsdatei auf Englisch beschrieben, darf der Wert, vor allem im Produktivbetrieb, nicht auf On gesetzt werden, weil dadurch .htaccess-Dateien unwirksam würden.

Anschließend wird mit service apache2 reload die Konfigurationsdatei geladen.

Virtuelle Domain anlegen und abrufbar machen

Um eine Webseite unter einer lokalen Domain abrufbar zu machen muss zuerst einmal eine lokale Domain hinzugefügt werden. Dazu wird die Datei /etc/hosts editiert:

Vorher:

127.0.0.1 localhost
127.0.1.1 RECHNERNAME.home RECHNERNAME

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Nachher könnte der Eintrag so aussehen:

127.0.0.1 localhost
127.0.1.1 RECHNERNAME.home RECHNERNAME
127.0.1.1 DEINEDOMAIN.home

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Domainendungen sollten sein: .localhost, .home, .test
Andere existieren möglicherweise schon im Internet, was dann zu Fehlern führen würde!

Virtuellen Host unter Apache erstellen

Nun muss der Apache noch angewiesen werden, bei Anfragen an die gerade "erstellte" Domain auch die passende Webseite auszuliefern. Dies geschieht per Virtual Host.

In der Standardkonfiguration liefert ein Apache2, egal über welche Domain er die Anfrage bekommt, immer Dateien über den selben Pfad aus, es ist also egal ob man http://127.0.0.1/verzeichnis/index.html oder http://MEINEDOMAIN.localhost/verzeichnis/index.html aufruft. Man wird immer die Datei /var/www/verzeichnis/index.html bekommen. Mit der Erstellung von Virtual Hosts lässt sich das ändern, es können mehrere Domains über eine IP-Adresse auf einem Server angesprochen werden und unterschiedliche Inhalte ausgeliefert werden.

Dafür wird im Verzeichnis /etc/apache2/sites-available/ eine Datei mit dem Namen DEINEDOMAIN.home.conf erstellt.
Diese bekommt folgenden Inhalt:

<VirtualHost *:80>
ServerName DEINEDOMAIN.home
DocumentRoot /home/DEINUSERNAME.localhost/www_data/Ordnername
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Werden mehrere lokale Domains in der /etc/hosts eingetragen, können durch Angabe verschiedener Ordnernamen auch mehrere Projekte synchron genutzt werden. In diesem Fall ist für jedes Projekt eine einzelne Konfiguration als virtual hostnotwendig. Dann wird die Seite aktiviert und die Konfigurationen des Apache neu geladen:

$ a2ensite debianadmin.localhost.conf
Enabling site debianadmin.localhost.
To activate the new configuration, you need to run:
service apache2 reload
$ service apache2 reload