Dies ist eine alte Version des Dokuments!


vhosts auf Apache2 Webserver einrichten (Debian)

Wenn Sie auf einem Server mehr als eine Webseite betreiben möchten, bietet die virtuelle Hostkonfiguration1) zwei Möglichkeiten an. Virtuelle Hosts können »IP-basiert« sein, was bedeutet, dass jedes Webangebot eine andere IP besitzt, oder »Namens-basiert«, was bedeutet, dass unter jeder IP-Adresse mehrere Namen laufen. Das folgende Tutorial beschränkt sich auf die Names-basierte Variante unter der Verwendung von Subdomains einer bestehenden Domain, es ist jedoch im Prinzip jeder FQDN2) anwendbar. Die Verwendung von namensbasierten virtuellen Hosts ist gewöhnlich einfacher. Sie müssen lediglich Ihren DNS-Server darauf einstellen, jeden Hostnamen auf die richtige IP-Adresse abzubilden, und dann den Apache HTTP Server so konfigurieren, dass er die verschiedenen Hostnamen erkennt. Man kann aber auch eine Testumgebung ohne vorhandenen DNS A-Record betrieben, dazu steht mehr beim Testen der Konfiguration. Namensbasierte virtuelle Hosts entschärfen auch den Bedarf an knappen IP-Adressen. Daher sollten Sie namensbasierte virtuelle Hosts verwenden, sofern kein besonderer Grund dafür existiert, IP-basierte virtuelle Hosts zu wählen.

Note: Die Apache Konfiguration wie zB der Speicherort der Document Roots, LogFiles etc können möglicherweise von Ihrer abweichen, da ich mich nicht in dem Apache Standard Document Root /var/www aufhalte.

Apache Installation

Die Installation des Apache Webservers ist denkbar simpel. Wenn Sie noch keinen Apache Webserver auf Ihrem System haben, installieren Sie diesen:

l# aptitude install apache2

Das wars schon, überprüfen können Sie dies in dem Sie die Default Webseite Ihres neuen Servers aufrufen:

So schaut dann Ihre neuer Internetauftritt aus! In der Standardinstallation befindet sich diese Standard index.html im Standard Document Root /var/www.

Die Verzeichnisstruktur von Apache gliedert sich auf einem Debian System wie folgt:

/# tree -d etc/apache2/
etc/apache2/
|-- conf.d          ← Beinhaltet zusätzliche Konfigurationsdateien
|-- mods-available  ← Speicherort der installierten Apache Module (→ Debian)
|-- mods-enabled    ← Symlink aus mods-enabled aktiviert das Modul (→ Debian)
|-- sites-available ← Speicherort der verfügbaren Virtual Hosts (→ Debian)
`-- sites-enabled   ← Symlink aus sites-enabled aktiviert die Virtual Hosts (→ Debian)

Virtual Host Direktive

Grundvoraussetzung für das Funktionieren einer name-based vhost Konfiguration ist das Vorhandensein eines DNS A-Records für jeden Vhost. Da alle Vhosts idR über die Selbe IP Adresse angesprochen werden, kann bei Verwendung einer IP Adresse nicht zwischen den Vhosts unterschieden werden. Wird dennoch eine IP Adresse verwendet, zeigt der Server idR den ersten Vhost in seiner Konfiguration an. Für die Übergabe der angesprochenen URL ist der HTTP-Header verantwortlich, der vom HTTP-Server ausgewertet und vom Browser übergeben wird. Wenn im Entwicklungsstadium einer Webseite noch kein A-Record vorhanden ist, kann man sich mit einem entsprechenden Eintrag in die lokale /etc/hosts-Datei der Entwicklungsmaschine(n) behelfen. Dazu mehr im Abschnitt »Testen der Konfiguration«
am Ende dieses Artikels.

Note: Anstelle der IP-Adresse des Servers können sie in der <Virtualhost> Anweisung auch mit einem *-Zeichen (→ <Virtualhost *>) arbeiten. Das *-Zeichen bei den Anweisungen NameVirtualHost und <Virtualhost> bewirkt, dass Apache diese Website auf allen IP-Adressen anbietet, die mit Listen-Anweisungen (z.B. in /etc/apache2/ports.conf) benannt wurden. Wünschen Sie eine Differenzierung, können Sie statt des *-Zeichens auch eine oder mehrere IP-Adressen (ggf. mit TCP-Port) (z.B. 192.168.1.1:80 192.168.1.2:80) angeben.

Der Hauptbestandteil der virtuellen Hosts ist die Virtual Host Direktive. Dazu wird für jeden verfügbaren (aber nicht aktiven) vhost eine Konfigurationsdatei in /etc/apache2/sites-available abgelegt. Die Struktur einer vhost-Konfigurationsdatei gliedert sich in der Basis wie folgt:

/etc/apache2/sites-available/SAMPLEFILE

# NameVirtualHost * 
 
<VirtualHost 192.168.172.132>
  ServerName    # FQDN des vhost; zB www.mydomain.com
  ServerAlias   # FQDN eines Server Alias, welche auf den gleichen vhost zeigt; zB alias.mydomain.com (Optional)
  DocumentRoot  # Das Homeverzeichnis des vhosts; zB /home/www.mydomain.com
  ServerAdmin   # Wer ist für den Server verantwortlich?; zB admin@mydomain.com (Optional)
  CustomLog     # Logfile Pfad; zB /home/www.mydomain.com/logs/access.log combined
  ErrorLog      # Pfad zum Error Log; zB /home/www.mydomain.com/logs/error.log 
  LogLevel      # Definiert wie ausführlich geloggt wird; zB
</VirtualHost>

Nun können wir das mal an zwei Beispiel Vhosts durchspielen. Dazu werden im ersten Schritt die Document Root- und Log-Verzeichnisse für die beiden FQDNs erstellt:

vmdebian3:/etc/apache2# mkdir -p /home/www.sample-1.com/logs
vmdebian3:/etc/apache2# mkdir -p /home/www.sample-2.com/logs

Note: Sowohl der Pfad wie der Name für das Document Root Verzeichnis ist frei wählbar, es muss letztlich nur mit dem in der virtual Host Direktive übereinstimmen. Ich verwende aber idR wegen der Übersichtlichkeit den FQDN des Servers für den Verzeichnisnamen und lege die Document Root Verzeichnisse in /home-Verzeichnis ab, was in meinen Installationen einen eigenen Mountpoint besitzt.

Im nächsten Schritt kopieren wir in jedes Document Root Verzeichnis eine eigene index.html, damit wird die Seite auch aufrufen können. Ich kopiere dafür zB die Default Apache index.html von /var/www und editiere diese zur einfacheren Unterscheidung noch mit eindeutige Angaben zum vhost:

vmdebian3:/etc/apache2# cp /var/www/index.html /home/www.sample-1.com/
vmdebian3:/etc/apache2# cp /var/www/index.html /home/www.sample-2.com/

Im Anschluss daran erstelle ich die beiden Host Direktiven in /etc/apache2/sites-available. Der Name der Host Direktiven ist frei wählbar, ich verwende dafür idR wegen der Übersichtlichkeit den domainnamen:

vmdebian3:/etc/apache2# touch /etc/apache2/sites-available/sample-1.com
vmdebian3:/etc/apache2# touch /etc/apache2/sites-available/sample-2.com

/etc/apache2/sites-available/sample-1.com

# NameVirtualHost 192.168.172.132
 
<VirtualHost 192.168.172.132>
 ServerName www.sample-1.com
 ServerAlias
 DocumentRoot /home/www.sample-1.com/
 ServerAdmin Pronto
 CustomLog /home/www.sample-1.com/logs/access.log combined
 ErrorLog /home/www.sample-1.com/logs/error.log
 LogLevel warn
</VirtualHost>

/etc/apache2/sites-available/sample-2.com

# NameVirtualHost 192.168.172.132
 
<VirtualHost 192.168.172.132>
 ServerName www.sample-2.com
 ServerAlias
 DocumentRoot /home/www.sample-2.com/
 ServerAdmin Pronto
 CustomLog /home/www.sample-2.com/logs/access.log combined
 ErrorLog /home/www.sample-2.com/logs/error.log
 LogLevel warn
</VirtualHost>

Im Anschluss daran legen wir einen Symlink der Host Direktiven aus /etc/apache2/sites-available nach /etc/apache2/sites-enabled

vmdebian3:/etc/apache2# ln -s /etc/apache2/sites-available/sample-1.com /etc/apache2/sites-enabled/sample-1.com
vmdebian3:/etc/apache2# ln -s /etc/apache2/sites-available/sample-2.com /etc/apache2/sites-enabled/sample-2.com
vmdebian3:/etc/apache2# ls -l /etc/apache2/sites-enabled/
insgesamt 0
lrwxrwxrwx 1 root root 26 25. Apr 13:33 000-default -> ../sites-available/default
lrwxrwxrwx 1 root root 41 25. Apr 17:15 sample-1.com -> /etc/apache2/sites-available/sample-1.com
lrwxrwxrwx 1 root root 41 25. Apr 17:16 sample-2.com -> /etc/apache2/sites-available/sample-2.com

Jetzt teilen wir dem Apache noch mit, dass er sich auf eine NameVirtualHost Direktive einstellen soll. Fügen Sie dazu in der /etc/apache2/httpd.conf die Zeile NameVirtualHost [IP Adresse des Servers] ein:

vmdebian3:/etc/apache2# echo "NameVirtualHost 192.168.172.132" >> /etc/apache2/httpd.conf
vmdebian3:/etc/apache2# cat /etc/apache2/httpd.conf 
NameVirtualHost 192.168.172.132

Zuletzt wird noch das IP/Hostname Binding in die »/etc/hosts« geschrieben:

vmdebian3:/etc/apache2# echo '192.168.172.132 www.sample-2.com www.sample-1.com' >> /etc/hosts

Am Ende laden wird die Apachekonfiguration neu, um den HTTP-Server unsere Änderungen mitzuteilen:

vmdebian3:/etc/apache2# /etc/init.d/apache2 reload
Reloading web server config: apache2.

Testen der Konfiguration

Da ich für diese Doku hier lokal auf meinen Test Systemen arbeite, kann ich nicht auf einen Internet DNS A-Record zurückgreifen und lege mir daher das Binding der FQDNs zur IP Adresse in meiner lokalen Hostsdatei an. Die Hostsdatei ist quasi der lokale DNS des Systems und es wird immer vor der eigentliche Anfrage an einen DNS Server geprüft, ob die lokale Hosts-Datei den Namen bereits auflösen kann. Die Hosts-Datei ist sowohl auf einem Linux-, wie auch auf einem Mac- und Windows-System verfügbar:

pronto-macpro:~ pronto$ sudo -s
Password:
bash-3.2# echo "192.168.172.132 www.sample-1.com" >> /etc/hosts
bash-3.2# echo "192.168.172.132 www.sample-2.com" >> /etc/hosts
bash-3.2# exit

/etc/hosts

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost 
fe80::1%lo0	localhost
 
192.168.172.132 www.sample-1.com
192.168.172.132 www.sample-2.com

Beim Aufruf der eingestellten URLs sollten Sie nun auf den jeweiligen vhost gelangen:


Wuppt! Enjoy and have fun


pronto 2010/04/25 18:08

tux/apache_vhost.1302992453.txt.gz (21885 views) · Zuletzt geändert: 2011/04/17 00:20 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0