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