Linux als SOHO-Server

für Linux- und Windows-Clients
http://linux.eusterholz.dyndns.org

Kapitel:

Home
Debian Installation
Debian Etc.
Internet-Zugang
Telnet
FTP
r-Utilities
SSH
Printing
NTP
Nameserver
NFS/NIS/Automount
Samba (SMB-Server)
Apache (WEB-Server)
Modem / ISDN
Backup
Etc.


Virtuelle Hosts

Installation/Konfiguration ] Status/Info ] UserDir ] [ Virtuelle Hosts ] Authentifizierung ] CGI ] mod_perl ] PHP ] SSI ] SSL ] WebDAV ] Log-Dateien ] ht://Dig ]


Der Apache HTTP-Server bietet die Möglichkeit zur Verwendung von virtuellen Hosts, um verschiedene Server für verschiedene IP-Adressen/Rechnernamen oder verschiedene Ports auf dem selben Server zu benutzen. So ist es möglich, dass z.B. Web-Angebote der Form: 'www.vhost_1.tld', 'www.vhost_2.tld', usw. auf einen Apache-Server angeboten werden. Dabei sollet man zwischen 'Namensbasierten virtuellen Servern' (ab HTTP/1.1 möglich) und 'IP-basierte virtuelle Hosts' unterscheiden.

Im folgenden werden Beispiel-Konfigurationen zu 'Virtuellen Hosts' unter Debian-Apache2 (sarge) gegeben. Dabei werden beide erwähnte Möglichkeiten vorgestellt.

Konfiguration: 'Namensbasierte virtuelle Hosts'

Bei 'Namensbasierten virtuellen Hosts' reagiert der Server mit nur einer IP-Adresse auf verschiedenen WEB-Adressen unterschiedlich. Das funktioniert nur in Zusammenhang mit einer korrekten Namensauflösung (DNS-Server). Große Provider wie z.B. '1&1 Internet' oder 'Strato' verwenden dieses Prinzip.

In folgenden wird ein Beispiel für zwei 'Namensbasierte virtuelle Hosts' aufgezeichnet. Die beiden Hosts in diesem Beispiel haben die Namen: 'www.vhost_1.tld' und 'www.vhost_2.tld'. Unter Debian-Apache2 sollten virtuelle Hosts konfigurationstechnisch ins Verzeichnis: '/etc/apache2/sites-available/' abgelegt werden. Dabei sollte für jeden Host eine Datei angelegt werden. Hier die Beispiel-Dateien für die beiden virtuellen Hosts:

/etc/apache2/sites-available/vhost_1.tld

<VirtualHost *>
        ServerName vhost_1.tld
        ServerAlias *.vhost_1.tld vhost_1.eusterholz.dyndns.org
        ServerAdmin webmaster@vhost_1.tld
        DocumentRoot /var/www/vhost_1.tld/html/
        ScriptAlias /cgi-bin/ /var/www/vhost_1.tld/cgi-bin/

        # Other directives here

        ErrorLog /var/www/vhost_1.tld/logs/error.log
        CustomLog /var/www/vhost_1.tld/logs/access.log common
</VirtualHost>

 

/etc/apache2/sites-available/vhost_2.tld

<VirtualHost *>
        ServerName vhost_2.tld
        ServerAlias *.vhost_2.tld vhost_2.eusterholz.dyndns.org
        ServerAdmin webmaster@vhost_2.tld
        DocumentRoot /var/www/vhost_2.tld/html/
        ScriptAlias /cgi-bin/ /var/www/vhost_2.tld/cgi-bin/

        # Other directives here

        ErrorLog /var/www/vhost_2.tld/logs/error.log
        CustomLog /var/www/vhost_2.tld/logs/access.log common
</VirtualHost>

Ein virtuelle Server wird dann jeweils durch den Block '<VirtualHost ... </VirtualHost>' repräsentiert. Innerhalb eines solchen Blocks für einen virtuellen Server werden die spezifischen Eigenschaften des Servers festgelegt.
Die zwingenden Einträge hierbei sind der 'ServerName' und das dazugehörende 'DocumentRoot'. Mit dem Direktive: 'ServerAlias' kann der virtuelle Host mit einem anderen Namen angesprochen werden. Falls der virtuelle Host CGI unterstützen soll, muss ein 'ScriptAlias' definiert werden. Damit bei Problemen der Verantwortliche eine E-Mail erhält, sollte mit 'ServerAdmin' eine E-Mail-Adresse angegeben werden. Die Mit dem Direktiven: 'ErrorLog' und 'CustomLog' werden dem virtuellen Host Protokolldateien für Zugangs- und Fehlermeldungen zugewiesen.

Nach den Einbringen der zusätzlichen Konfigurationsdateien sind alle benötigten Verzeichnisse für die virtuellen Hosts zu erstellen. In diesem Beispiel sind das die Verzeichnisse: '/var/www/vhost_1' und '/var/www/vhost_2', indem jeweils ein Verzeichnis mit den Namen '/html', '/cgi-bin' und '/logs' erstellt werden müssen. Danach können die Sites mit dem Kommando: 'a2ensite' aktiviert werden.

Wie schon erwähnt, werden für virtuelle Hosts ein Name-Server (DNS) benötigt, indem die Namen der einzelnen Hosts durch entsprechende 'CNAME' bzw. 'A Records' bekannt gegeben werden. Die Einträge sind in der zuständigen Zonen-Datei zu machen. Nach den erneuten Start des Apache-Servers sollte ein Zugriff mit: 'www.vhost_1.tld' bzw. 'www.vhost_2.tld' möglich sein.

Konfiguaration: 'IP-basierte virtuelle Hosts'

Bei einem 'IP-basierten virtuellen Host' reagiert der Server auf mehrere IP-Adressen (die z.B. durch virtuelle Netzwerk-Interfaces erzeugt werden) in Abhängigkeit von der IP-Adresse unterschiedlich. D.h. es werden je nach angeforderter Adresse verschiedene Bereiche berücksichtigt.

Wie auch bei 'Namensbasierten virtuellen Hosts' empfiehlt es sind, für jede Site eine eigene Konfigurationsdatei zu erstellen. Hier zwei solche Beispieldateien die unter der IP-Adresse: 'http://192.168.0.11/' und 'http://192.168.0.12/' angesprochen werden können:

/etc/apache2/sites-available/vhost_3.tld

<VirtualHost 192.168.0.11>
        ServerName vhost_3.tld
        ServerAlias *.vhost_3.tld vhost_3.eusterholz.dyndns.org
        ServerAdmin webmaster@vhost_3.tld
        DocumentRoot /var/www/vhost_3.tld/html/
        ScriptAlias /cgi-bin/ /var/www/vhost_3.tld/cgi-bin/

        # Other directives here

        ErrorLog /var/www/vhost_3.tld/logs/error.log
        CustomLog /var/www/vhost_3.tld/logs/access.log common
</VirtualHost>

 

/etc/apache2/sites-available/vhost_4.tld

<VirtualHost 192.168.0.12>
        ServerName vhost_4.tld
        ServerAlias *.vhost_4.tld vhost_4.eusterholz.dyndns.org
        ServerAdmin webmaster@vhost_4.tld
        DocumentRoot /var/www/vhost_4.tld/html/
        ScriptAlias /cgi-bin/ /var/www/vhost_4/cgi-bin/

        # Other directives here

        ErrorLog /var/www/vhost_4.tld/logs/error.log
        CustomLog /var/www/vhost_4.tld/logs/access.log common
</VirtualHost>

Der prinzipielle Aufbau einer Konfigurationsdatei ist quasi identisch wie beim 'Namensbasierten virtuellen Host' (vgl. oben). Der einzige Unterschied ist, hinter: '<VirtualHost ...' wird nun die IP-Adresse für die entsprechende Site festgelegt.

Auch sind nach dem Einbringen der Konfigurationsdateien sind die entsprechenden notwendigen Verzeichnisse zu erzeugen und die neuen virtuellen Host zu aktivieren (Link erzeugen, z.B. mit: 'a2ensite').

Nach einen Neustart des Apache-Servers, sollten die Sites mit: 'http://192.168.0.11/' und 'http://192.168.0.12/' angesprochen werden können. Um sie mit den eigentlichen Namen ('www.vhost_3.tld' bzw. 'www.vhost_4.tld') ansprechen zu können, bedarf es ebenfalls eine Name-Server-Konfiguration.

Anmerkungen

Name-Server Konfiguration

Damit einen virtuellen Host korrekt über seinen Server-Namen ('ServerName') angesprochen werden kann, muss ein Name-Server korrekt konfiguriert sein. Hier ein Auszug einer Konfiguration, an Hand des Name-Servers: 'Bind':

Auszug aus: /etc/bind/named.conf

...

// add entries for other zones below here

zone "vhost_1.tld" in {
             type master;
             file "/etc/bind/vhost_1.tld.zone";
};

zone "vhost_2.tld" in {
             type master;
             file "/etc/bind/vhost_2.tld.zone";
};

zone "vhost_3.tld" in {
             type master;
             file "/etc/bind/vhost_3.tld.zone";
};

zone "vhost_4.tld" in {
            type master;
            file "/etc/bind/vhost_4.tld.zone";
};

...

In der 'named.conf' sind alle vier zuvor vorgestellten virtuellen Hosts aufgeführt. Die entsprechenden Zonen-Dateien sind gelb markiert.

Hier als Beispiel der Inhalt der erste Zonen-Datei:

Auszug aus: /etc/bind/vhost_1.tld.zone

$TTL 2D
; origin                        pri.ns              email

vhost_1.tld.       IN SOA       joshua              root.joshua (
                                                    2005030601 ; serial
                                                    1D         ; refresh
                                                    2H         ; retry
                                                    1W         ; expiry
                                                    2D )       ; minimum
                   IN NS        joshua
                   IN MX 1      joshua

vhost_1.tld.       IN A         192.168.0.10                   ; virtual host
*.vhost_1.tld.     IN A         192.168.0.10                   ; virtual host

In den gelb markierten Zeile ist der Verweis auf die IP-Adresse zu finden, in diesem Fall die: '192.168.0.10'. Die zwei Zeilen sind notwendig, damit eine Namenauflösung in der Form 'vhost_1.tld' bzw. 'www.vhost_1.tld' oder auch 'abc.vhost_1.tld' möglich ist.
Die andern Zonen-Dateien sind vom Aufbau prinzipiell äquivalent aufgebaut; wobei die zweite auch auf: '192.168.0.10' zeigen sollte, die dritte auf: '192.168.0.11' und die vierte auf '192.168.0.12'.

Möchte man einer Netzwerkkarte weitere IP-Adressen zuordnen, so kann dies mit dem Kommando: 'ifconfig' geschehen. Mit den folgenden zwei Kommandos werden die virtuelle Netzwerk-Interfaces erzeugt, wie sie für die zuvor vorgestellten 'IP-basierten virtuellen Hosts' benötigt werden:

/sbin/ifconfig eth0:1 192.168.0.11
/sbin/ifconfig eth0:2 192.168.0.12

Sollen die Netzwerkkarte permanent beim Hochlauf des Systems über mehrere IP-Adressen verfügen, so sind die Einträge hierzu in der Datei: '/etc/network/interfaces' zu machen:

Auszug aus: /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
       iface eth0 inet static
       address 192.168.0.10
       netmask 255.255.255.0
       network 192.168.0.0
       broadcast 192.168.1.255
       gateway 192.168.0.1

up ifconfig eth0:1 192.168.0.11
up ifconfig eth0:2 192.168.0.12

Hier wurden der Netzwerkkarte '192.168.0.10' noch die weiteren virtuellen Netzwerk-Interfaces: '192.168.0.11' und '192.168.0.12' zugeordnet.

Umgebung des der virtuellen Hosts einrichten

In folgenden wird gezeigt, wie ein Benutzer anzulegen ist, der ausschließlich auf seinen virtuellen Host zugreifen kann. Weiterhin wird gezeigt wie die Verzeichnisrechte für den virtuellen Host zu setzen sind. Hier ein Bsp. anhand des 'vhost_1.tld':

useradd -g www-data -d /var/www/vhost_1.tld/ -s /bin/false -m user_1
passwd user_1
chown user_1.www-data /var/www/vhost_1.tld
chmod 750 /var/www/vhost_1.tld
mkdir -p /var/www/vhost_1.tld/{html,cgi-bin,logs}
chown -R user_1.www-data /var/www/vhost_1.tld/*

Mit 'useradd' wird ein Benutzer, in diesem Fall der Benutzer 'user_1' inkl. seines /home-Verzeichnises '/var/www/vhost_1.tld' angelegt (Option '-m' dient zum Anlegen des /home-Verzeichnises). Der Benutzer gehört der Gruppe 'www-data' an und verfügt über keine Shell (Option: '-s /bin/false').
Das Passwort wird dem Benutzer mit 'passwd' zugewiesen; das Passwort ist zweimal einzugeben.
Das /home-Verzeichnis soll dem Benutzer 'user_1' gehören und der Gruppe 'www-data' angehören.
weiterhin soll es die Berechtigung '750' bekommen.
In den /home-Verzeichnis werden noch folgende drei Verzeichnisse angelegt: 'html', 'cgi-bin' und 'log'. Im Verzeichnis befinden sich die darzustellenden Seiten, im 'cgi-bin' benutzereigene CGI-Skripte und im Verzeichnis: 'log' die log-Dateien des virtuellen Hosts.
Zum Schluss werden noch mal Benutzer und Gruppe für alle Dateien und Verzeichnisse im virtuelle Host angepasst.

Damit ein FTP-Zugriff gewährleistet ist, muss evtl. noch in der Datei: '/etc/shells' die Zeile '/bin/false' eingefügt werden.

Weitere Infos

Homepage: Apache Software Foundation http://www.apache.org/
Dokumentation zum Apache HTTP Server Version 2.0 http://httpd.apache.org/docs-2.2/
Apache-Dokumentation zu virtuellen Hosts http://httpd.apache.org/docs/2.2/vhosts/
System-Dokumentation: apache2 /usr/share/doc/apache2
Manualseiten zu: ifconfig; interfaces man ifconfig; man interfaces

Home ] Nach oben ] Installation/Konfiguration ] Status/Info ] UserDir ] [ Virtuelle Hosts ] Authentifizierung ] CGI ] mod_perl ] PHP ] SSI ] SSL ] WebDAV ] Log-Dateien ] ht://Dig ]

letzte Änderung: 28. Januar 2008

 

Copyright © 2004 Norbert Eusterholz