Virtuelle Hosts

Aus mxlinuxusers.de
Zur Navigation springen Zur Suche springen

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