Virtuelle Hosts

    Aus mxlinuxusers.de

    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 webmaster@example.com
       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

    Weblinks[Bearbeiten | Quelltext bearbeiten]