Virtuelle Hosts
Der Begriff "virtuelle Hosts" (virtual host) bedeutet, mehrerer Domains oder IP-Adressen (Webangebote) auf einem einzigen Rechner zu betreiben. Dies ist eine gängige Praxis bei kommerziellen Anbietern, die so viele hunderte Webseiten von verschiedenen Kunden auf einem Server laufen lassen (hosten), ohne das sich diese Webangebote gegenseitig stören, obwohl sie in der Regel alle die gleiche IP-Adresse besitzen. Da diese Technik auch für Privatanwender nützlich ist, sei hier kurz auf die Grundlagen eingegangen.
Für den Betrieb von virtuellen Hosts gibt es im Prinzip drei Möglichkeiten:
- IP-basiert: jeder Host hat eine eigene IP-Adresse, trotzdem laufen alle auf dem gleichen Server. Dies setzt vorraus, daß auch soviele verschiedene Netzwerkschnittstellen vorhanden sind, damit jeder Schnittstelle eine eigene IP zugeteilt werden kann. Diese Technik ist relativ robust, aber schwieriger einzurichten, so daß hier nicht weiter darauf eingegangen wird.
- Port-basiert: die Hosts laufen auf der gleichen IP-Adresse, bekommen jedoch verschiedene Portnummern zugewiesen, z.B. virtual1.com:80 und virtual2.com:81, oder klarer z.B. 192.168.178.2:80 und 192.168.178.2:81
lässt sich leicht realisieren, ist aber für den Anwender umständlich, da beim Aufruf immer die Portnummer mit eingegeben werden muss.
- namensbasiert: die Hosts haben die gleiche IP, aber verschiedene Namen, z.B. gosia-seite.de und meinlinux.de
Da namensbasierte virtuelle Hosts die bei weitem verbreiteste Variante sind, werden wir hier nur darauf eingehen. Weiterhin sei bemerkt, dass es sich um eine Anleitung für den Apache2-Server auf Debian-Basis handelt. Virtuelle Hosts lassen sich auch mit anderen Servern wie Lightning oder nginx einrichten, dort ist die Vorgehensweise aber eine andere.
Als Beispiel für den Domainnamen benutzen wir ab jetzt immer den Namen "meinweb". Auf Zusätze wie meinweb.de oder www.meinweb.de wird bewusst verzichtet, da das Beispiel an die IP-Adresse 127.0.0.1 (localhost) gebunden wird und so auch nie den heimischen Rechner verlassen kann und auch nur ein Beispiel darstellt, dass jeder nach Lust und Laune verändern kann und soll.
Vorausetzungen[Bearbeiten | Quelltext bearbeiten]
- Apache muss laufen. Kontrolle z.B. mit
apachectl status
hier sollte eine längere Statusmeldung kommen, z.B.:
Apache Server Status for localhost (via ::1) Server Version: Apache/2.4.38 (Debian) mod_perl/2.0.10 Perl/v5.28.1 ... CPU Usage: u.12 s.25 cu0 cs0 - .00629% CPU load 0 requests/sec - 0 B/second 1 requests currently being processed, 4 idle workers ...
kommt eine Fehlermeldung
Looking up localhost Making HTTP connection to localhost Alert!: Unable to connect to remote host. ...
so sollte man zuerst versuchen, Apache zu starten
sudo apachectl start
im Erfolgsfall gibt es keine Meldung!
Bei einer Fehlermeldung
apachectl Kommando nicht gefunden
so ist Apache gar nicht installiert. Nachinstallieren:
sudo apt-get install apache2
- die Namensauflösung muss per DNS (Domain Name System) funktionieren, d.h. es muss gesichert sein, dass der Server weiss, dass sich hinter dem Domain-Namen "meinweb" die IP-Adresse 127.0.0.1 verbirgt. Für private Zwecke ist es am einfachsten, dies in der Datei /etc/hosts einzutragen, d.h. dort diese Zeile zu ergänzen:
127.0.0.1 meinweb
Konfigurationsdatei[Bearbeiten | Quelltext bearbeiten]
im Verzeichnis /etc/apache2/sites-available/ muss eine Konfigurationsdatei angelegt werden. Der Name ist beliebig, es empfiehlt sich aber, als Dateiname den Domain-Namen zu wählen. Wichtig ist aber die Endung .conf
In unserem Fall ergibt sich also ein Dateiname meinweb.conf
Der Aufbau sieht in der Regel so aus
<VirtualHost *:80> ServerName meinweb ServerAlias www.meinweb.de ServerAdmin [email protected] DocumentRoot /var/www/meinweb/httpdocs <Directory /var/www/meinweb/httpdocs> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/meinweb/error.log CustomLog ${APACHE_LOG_DIR}/meinweb/access.log combined </VirtualHost>
Wichtig ist die "Klammerung" mit <VirtualHost *:80> am Anfang und </VirtualHost> am Ende. Die 80 bedeutet den Port, an dem Apache läuft und sollte nur verändert werden, wenn man weiss was man tut, da Port 80 der Standardport ist.
- ServerName: der gewünschte Domain-Name
- ServerAlias: andere Namen (Alias), mit dem Domain auch aufgerufen werden kann (kann auch weggelassen werden)
- ServerAdmin: Mail-Adresse vom zuständigen Admin, erscheint oft in Fehlerseiten (z.b. Error 404)
- DocumentRoot: Pfad zum Verzeichnis, in dem dann die anzuzeigenden HTML-Seiten liegen
- Options: steuert die Anzeige der Seiten (es gibt noch mehr Optionen, die angeführten sind ein sinnvolles Minimum, auf das nicht verzichtet werden sollte)
- -Indexes: verhindert dass die Verzeichnisse im DocumentRoot als Liste angezeigt werden
- +FollowSymLinks: Apache folgt symbolischen Links
- AllowOverride: Gibt an, welche in .htaccess deklarierten Direktiven die Konfigurationsdirektiven außer Kraft setzen können. "All" ist eine guter Wert
- ErrorLog, CustomLog: wo sollen Log-Dateien abgelegt werden. Hier könnte auch ein absoluter Wert angegeben werden, z.B.
/var/log/apache2/meinweb/error.log
die Verbindung mit der Umgebungsvariablen APACHE_LOG_DIR ist jedoch gute Praxis, die sich bewährt hat und die man getrost beibehalten kann. Wichtig ist aber, dass das Verzeichnis schon vorhanden und zugänglich ist. Ist es nicht vorhanden startet auch Apache nicht. Die Log- und Errordateien sollten root und der Gruppe adm gehören und als Rechte 640 -rw-r----- besitzen.
Die Konfigurationsdatei muss anschliessend noch "freigeschaltet" werden:
sudo a2ensite <Dateiname-ohne-conf>
also
sudo a2ensite meinweb
Möchte man mehrere virtuelle Hosts gleichzeitig freischalten, so kann a2ensite auch ohne Dateiname aufgerufen werden, es erfolgt dann eine Abfrage, welche Dateien gemeint sind. In der Antwort sind auch Wildcards möglich:
sudo a2ensite Your choices are: 000-default default-ssl meinweb Which site(s) do you want to enable (wildcards ok)?
Eigentlich legt der Aufruf von a2ensite nur einen Softlink der Konfigurationsdatei ins Verzeichnis /etc/apache2/sites-enabled/, es wäre also auch möglich den Softlink von Hand zu legen
sudo ln -s /etc/apache2/sites-available/meinweb.conf /etc/apache2/sites-enabled/
aber warum umständlich wenn es auch kürzer geht, zumal a2ensite freundlicherweise noch darauf hinweist, Apache mit
sudo service apache2 reload
neu zu starten, um damit die Konfigurationsdatei einzulesen. Eine andere Variante, Apache neu zu starten, ist das Kommando
sudo apachectl restart
Welches davon man benutzt ist Geschmackssache.
Anschliessend empfiehlt es sich auf jeden Fall noch mit
sudo apachectl configtest
zu kontrollieren, ob die Konfigurationsdatei formal in Ordnung ist. Hier sollte hoffentlich die Erfolgsmeldung
Syntax OK
kommen. Wenn nicht, dann korrigieren. Dabei ist die Fehlermeldung meistens hilfreich, weil sie auf mögliche Fehler hinweist
sudo apachectl configtest AH00526: Syntax error on line 9 of /etc/apache2/sites-enabled/meinweb.conf: Illegal override option Alt Action 'configtest' failed. The Apache error log may have more information.
hier der Hinweis auf die falsch geschriebene Option in Zeile 9: Alt statt All
Ist alles in Ordnung sollte bei Aufruf des Browser mit dem Domainnamen die nett gestaltete Homepage erscheinen
firefox meinweb
Stolperfallen[Bearbeiten | Quelltext bearbeiten]
- in /etc/apache2/apache2.conf muss die Option IncludeOptional sites-enabled/*.conf auskommentiert sein, was eigentlich der Fall ist
- die in der Konfigurationsdatei angegebenen Verzeichnisse für die Logdateien müssen vorhanden und zugänglich sein
- in der Datei /etc/hosts muss ein Verweis der Domain auf die IP-Adresse vorhanden sein
- Im Browser darf in der Option "Verbindungs-Einstellungen" die Einstellung "DNS über HTTPS aktivieren" nicht aktiviert sein