
Virtuelle Hosts für Apache erstellen
Was ist ein virtueller Host?
Wenn eine Domain auf die IP des Apachen zeigt, wird sie, wenn nichts anderes konfiguriert ist, automatisch auf /var/www verwiesen und daraus die
verfügbaren Webseiten geladen. Man kann aber mehrere Seiten auf einem Webserver haben, die alle auf die gleiche IP "hören".
Um zu konfigurieren welcher Domainname auf welche Verzeichnisse zeigen soll, nimmt man die Virtual Hosts zur Hilfe.
Voraussetzungen
- Linux mit Apache2 installiert
- Basicwissen über standard Linux Commandline Befehle -> Einführung auf dieser Seite
- Basicwissen über Netzwerke und Namensauflösung
- Editor (In diesem Beispiel wird nano verwendet)
Dokumentation
Mehr Infos über virtuelle Hosts und die Einstellungen dafür findet man
wenn man hier klickt (Englisch).
Einrichtung für mehrere Seiten
Bitte ein Terminal öffnen und in das Verzeichnis /etc/apache2/sites-available navigieren. Da drin sind die Virtual Host
Konfigurationsdateien die wir benötigen.
In dieser Anleitung machen wir selber eine neue 000-default-Datei, erstellen eine Datei für die Hauptwebseite des Servers und eine für eine
Intranetseite.
Zudem wirden die Virtualhost so konfiguriert, dass man die Intranetseite nicht von aussen erreichen kann, sondern nur von einem internen
Adressbereich.
000-default anlegen und konfigurieren
Die Datei nennen wir so, da der Apache immer die erste Virtualhosts-Datei die er findet für Anfragen, die er nicht kennt
auflöst. 000 am Anfang stellt sicher, dass diese Datei immer zuerst gelesen wird.
Also öffnen wir die Datei mit nano:
sudo nano 000-default
...und füllen die Datei mit folgendem Inhalt:
<VirtualHost *:80>
# Da hier kein Servername und oder Alias steht, wird diese Seite aufgerufen
# wenn ein unbekannter Domainname auf diese IP verlinkt
ServerAdmin EMAILADRESSE
DocumentRoot /var/www/seiten/easeli.ch
# Falls /intranet eine unterseite von root waere, koennte sie so
# nur fuer das intranet verfuegbar gemacht werden:
#<Directory /var/www/seiten/easeli.ch/intranet/>
# Order Deny,Allow
# Deny from all
# Allow from 192.168.0
#</Directory>
# Eigene Errorseiten kann man so aktivieren (Der Documentroot des Hauptvirtualhosts gilt!):
# ErrorDocuemnt Errorcode Errorseite oder (in Anführungszeichen) Text
# ErrorDocument 404 /errors/404.html
# Die LOGs habe ich deaktiviert
# ErrorLog /var/log/apache2/error.log
# LogLevel warn
# CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>
Damit das unser neuer Standard-Virtualhost wird müssen wir abspeichern und noch aktivieren.
Wir deaktivieren zuerst alle Virtualhosts die momentan aktiv sind. Dafür nehmen wir das Tool von Apache namens a2dissite zur Hilfe. Alles
was a2dissite macht ist den Link in /etc/apache2/sites-enabled zu entfernen. a2ensite macht das Gegenteil und legt einen Link
in /etc/apache2/sites-enabled an.
sudo a2dissite default && sudo a2dissite default-ssl
Damit jetzt unsere neue Virtualhostsdatei aktiv wird führen wir folgenden Befehl aus:
sudo a2ensite 000-default
Testen ob der Syntax aller aktivierten VirtualHost-Dateien korrekt ist, kann man mit dem Befehl:
sudo apachectl configtest
Wenn hier die Meldung Syntax OK erscheint, kann man den Apachen ohne Gefahr neu starten (nächster Schritt).
Alles was jetzt noch gemacht werden muss ist folgenden Befehl ausführen, damit Apache neu geladen wird und die Konfigurationsdateien
einliest (Nach a2ensite oder a2dissite wird eine Meldung ausgegeben, dass man das machen soll):
sudo service apache2 reload
Virtualhostdatei für eigene Seite einrichten
Meine eigene Seite heisst easeli.ch, deshalb ist easeli.ch in diesem Beispiel mit Deiner gewünschten Adresse zu
ersetzen.
Das ServerAlias macht, damit dieselbe Datei auch für www.easeli.ch gilt, anstatt nur für easeli.ch. Solche Dateien kannst Du so viele Du möchtest
anlegen, damit der Server auf die angesprochenen Adressen reagiert. Natürlich muss die Namens und IP kombination den Clients bekannt sein, deshalb
kann man wie hier unter DNS beschrieben die Hosts-Datei auf einem Client anpassen (auch Windows), dass man den
Namen wie gewünscht auflöst.
Die Unterordner die ich ausnehme nach der ersten Deny Regel, sind Unterordner, die der Browser trotzdem anzeigen können muss, da die Bilder zum Beispiel
da abgespeichert sind.
Also öffnen wir die Datei mit nano:
sudo nano easeli.ch
...und füllen die Datei mit folgendem Inhalt:
<VirtualHost *:80>
ServerName easeli.ch
# www.easeli.ch, sowie die DynDNS Adresse von noip.com wird auch auf diesen Virtualhost aufgeloest
ServerAlias www.easeli.ch easelee.ddns.net
ServerAdmin EMAILADRESSE
DocumentRoot /var/www/seiten/easeli.ch
# Eigene Errorseiten kann man so aktivieren (Der Documentroot des Hauptvirtualhosts gilt!):
# ErrorDocuemnt Errorcode Errorseite oder (in Anführungszeichen) Text
# ErrorDocument 404 /errors/404.html
#Inhalt ist so nur per Includes von Aussen aufrufbar
<Directory /var/www/seiten/easeli.ch/inhalt>
Order Deny,Allow
Deny from all
Allow from none
</Directory>
# Unterordner von obiger Regel ausnehmen
<Directory /var/www/seiten/easeli.ch/inhalt/audio>
Order Deny,Allow
Deny from none
Allow from all
</Directory>
# Unterordner von obiger Regel ausnehmen
<Directory /var/www/seiten/easeli.ch/inhalt/audio>
Order Deny,Allow
Deny from none
Allow from all
</Directory>
# Unterordner von obiger Regel ausnehmen
<Directory /var/www/seiten/easeli.ch/inhalt/calendar>
Order Deny,Allow
Deny from none
Allow from all
</Directory>
# Unterordner von obiger Regel ausnehmen
<Directory /var/www/seiten/easeli.ch/inhalt/downloads>
Order Deny,Allow
Deny from none
Allow from all
</Directory>
# Unterordner von obiger Regel ausnehmen
<Directory /var/www/seiten/easeli.ch/inhalt/forum>
Order Deny,Allow
Deny from none
Allow from all
</Directory>
# Unterordner von obiger Regel ausnehmen
<Directory /var/www/seiten/easeli.ch/inhalt/gallery>
Order Deny,Allow
Deny from none
Allow from all
</Directory>
# Unterordner von obiger Regel ausnehmen
<Directory /var/www/seiten/easeli.ch/inhalt/kommentare>
Order Deny,Allow
Deny from none
Allow from all
</Directory>
# Unterordner von obiger Regel ausnehmen
<Directory /var/www/seiten/easeli.ch/inhalt/login>
Order Deny,Allow
Deny from none
Allow from all
</Directory>
# Unterordner von obiger Regel ausnehmen
<Directory /var/www/seiten/easeli.ch/inhalt/main/pictures>
Order Deny,Allow
Deny from none
Allow from all
</Directory>
# Unterordner von obiger Regel ausnehmen
<Directory /var/www/seiten/easeli.ch/inhalt/pictures>
Order Deny,Allow
Deny from none
Allow from all
</Directory>
# Unterordner von obiger Regel ausnehmen
<Directory /var/www/seiten/easeli.ch/inhalt/videos>
Order Deny,Allow
Deny from none
Allow from all
</Directory>
# ErrorLog /var/log/apache2/error.log
# LogLevel warn
# CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>
Damit jetzt unsere neue Virtualhostsdatei aktiv wird führen wir folgenden Befehl aus:
sudo a2ensite easeli.ch
Alles was jetzt noch gemacht werden muss ist folgenden Befehl ausführen, damit Apache neu geladen wird und die Konfigurationsdateien
einliest (Nach a2ensite oder a2dissite wird eine Meldung ausgegeben, dass man das machen soll):
sudo service apache2 reload
Virtualhostdatei für Subdomain der eigenen Seite einrichten
subdomain ist hier ein Platzhalter für Deine gewünschte Subdomain.
Wir kopieren die Datei von unserer Hautpseite in eine neue:
sudo cp easeli.ch subdomain.easeli.ch
...und füllen die Datei mit folgendem Inhalt:
<VirtualHost *:80>
ServerName subdomain.easeli.ch
ServerAdmin EMAILADRESSE
DocumentRoot /var/www/seiten/subdomain
ServerSignature On
</VirtualHost>
Damit jetzt unsere neue Virtualhostsdatei aktiv wird führen wir folgenden Befehl aus:
sudo a2ensite subdomain.easeli.ch
Alles was jetzt noch gemacht werden muss ist folgenden Befehl ausführen, damit Apache neu geladen wird und die Konfigurationsdateien
einliest (Nach a2ensite oder a2dissite wird eine Meldung ausgegeben, dass man das machen soll):
sudo service apache2 reload
Virtualhostdatei für Intranetseite einrichten
Meine eigene Intranetseite heisst intranet, deshalb ist intranet in diesem Beispiel mit Deiner gewünschten Adresse zu
ersetzen.
Datei mit nano öffnen:
sudo nano intranet
...und füllen die Datei mit folgendem Inhalt:
<VirtualHost *:80>
ServerName intranet
ServerAdmin EMAILADRESSE
DocumentRoot /var/www/seiten/intranet/
<Directory /var/www/seiten/intranet/>
Order Deny,Allow
Deny from all
Allow from 192.168.0
</Directory>
# Eigene Errorseiten kann man so aktivieren (Der Documentroot des Hauptvirtualhosts gilt!):
# ErrorDocuemnt Errorcode Errorseite oder (in Anführungszeichen) Text
# ErrorDocument 404 /errors/404.html
# ErrorLog /var/log/apache2/error.log
# LogLevel warn
# CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>
Damit jetzt unsere neue Virtualhostsdatei aktiv wird führen wir folgenden Befehl aus:
sudo a2ensite intranet
Alles was jetzt noch gemacht werden muss ist folgenden Befehl ausführen, damit Apache neu geladen wird und die Konfigurationsdateien
einliest (Nach a2ensite oder a2dissite wird eine Meldung ausgegeben, dass man das machen soll):
sudo service apache2 reload
Wenn in einem Document-Root keine Webseite hinterlegt ist, wird das Directory-Listing angezeigt. Es sieht dann etwa so aus:
Index of /
Name Last modified Size Description
Unterordner Datum Grösse Beschreibung
Apache/VERSION (Betriebssystem) Server at IP Port PORT
Infos zum Dokument
Author: Christoph Iseli
Datum: 08.08.2014
Letzte Änderung: 26.11.2014