Virtual Hosts auf dem ApacheWebServer #
Wer mehrere verschiedene Webauftritte auf einem einzelnen Rechner unterbringen will, kann dies mit sogenannten "Virtual Hosts" tun. Dabei wird ein und derselbe Rechner unter unterschiedlichen DNS-Namen aufgerufen und der Benutzer bekommt jedesmal einen komplett anderen Webauftritt zu sehen.
Im Prinzip konfiguriert man dies in der Datei /etc/apache/httpd.conf folgendermassen:
NameVirtualHost * <VirtualHost *> ServerName localhost DocumentRoot /var/www </VirtualHost> <VirtualHost *> ServerName jens DocumentRoot /home/jens/public_html/ ScriptAlias /cgi-bin/ /home/jens/public_html/cgi-bin/ </VirtualHost> <VirtualHost *> ServerName bayen.bayen.loc DocumentRoot /home/tbayen/public_html/ ScriptAlias /cgi-bin/ /home/tbayen/public_html/cgi-bin/ </VirtualHost>
Alternativ kann man auch das Modul mod_vhost_alias zu Hilfe nehmen. Dieses ist interessant, wenn ich wirklich viele Namen und Webauftritte verwalten will. So kann z.B. jeder Benutzer einen eigenen Webauftritt unter seinem Benutzernamen haben, wenn man folgendes in die /etc/apache/httpd.conf einfügt:
VirtualDocumentRoot /home/%1/public_html VirtualScriptAlias /home/%1/public_html/cgi-bin
(Im Beispiel ist "%1" verwendet worden. Dies entspricht dem ersten Teil des verwendeten DNS-Namens. Mit "%0" kann man den gesamten Namen als Verzeichnisnamen einfügen.)
The Debian Way #
Unter Debian Etch ist die Konfiguration auf mehrere Dateien aufgeteilt. Man kann dort für jeden einzelnen Host eine eigene Konfigurationsdatei anlegen. Ich habe hierzu im Verzeichnis /etc/apache/sites-available/ eine neue Datei für jede Domain angelegt. Diese sieht dann z.B. so aus, um auch Unterdomains wie "www..." abzudecken.
<VirtualHost *> ServerName lug-krefeld.de ServerAlias *.lug-krefeld.de #ServerAdmin webmaster@localhost DocumentRoot /home/lug/public_html/lug-krefeld.de/ #<Directory /> # Options FollowSymLinks # AllowOverride None #</Directory> <Directory /home/lug/public_html/lug-krefeld.de/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all # This directive allows us to have apache2's default start page # in /apache2-default/, but still have / go to the right place #RedirectMatch ^/$ /apache2-default/ </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On </VirtualHost>
Im Verzeichnis /etc/apache/sites-enabled/ nun einen Link auf die soeben erstellte Datei setzen und damit ist das meiste schonmal erledigt.
Benutzerverwaltung und Verzeichnishierarchie #
Wer virtual Hosts haben möchte, hat es auch oft mit verschiedenen Benutzern zu tun, die diese Hosts warten wollen/sollen. Hierzu bietet es sich an, das normale Linux-Benutzersystem zu verwenden. Man kann die Benutzer in die Gruppe "www-data" aufnehmen, so daß diese die von Ihnen angelegten Dateien dieser Gruppe zuordnen und so dem Webserver Zugriff darauf geben können. Sie können natürlich auch globalen Zugriff gewähren. In beiden Fällen hat natürlich das CGI-Skript eines Benutzers Zugriff auf die Quelltexte des anderen Benutzers und kann so u.U. dessen Datenbank-Passwörter etc. auslesen. Hier ist also etwas Vorsicht geboten. Für wirklich grosse Mehrbenutzersysteme gibt es die Möglichkeit, den Apache jeweils unter der Benutzerkennung des entsprechenden Benutzers laufen zu lassen. Damit habe ich aber bisher keine Erfahrungen.
Wie man in obiger Konfiguration sieht, bietet es sich an, Webseiten eines Benutzers in seinem Home-Verzeichnis in einem eigenen Unterverzeichnis zu halten.
Kurz gesagt wird also folgendes gemacht:
als root:
#adduser benutzername #addgroup benutzername www-data
und als Benutzer:
$mkdir public_html $chown :www-data public-html -R
Eventuell ist die Installation eines FtpServer eine gute Idee, weil FTP nach wie vor die Standard-Methode ist, mit der Benutzer auf Ihre Webserver zugreifen. FTP bietet dabei den Vorteil, daß der Benutzer keinen direkten Shell-Zugang erhält.
Namensauflösung #
Zu beachten ist, daß diese Einstellungen hier nichts mit der Namensauflösung zu tun haben. Man muss also selbstverständlich den Nameserver auch noch entsprechend konfigurieren.
Virtual Hosts auf dem heimischen Server #
Wer zu Hause einen Server stehen hat, der sowieso den ganzen Tag läuft, kann seine Webseiten auch dort einrichten. Dazu bedarf es allerdings einiger Tricks. Zuerst sollte man DynamischesDNS einrichten. Damit kann man natürlich auch mehrere Namen vergeben, die dann per obiger virtueller Hosts ganz unterschiedlichen Webseiten zugeordnet werden können.
Je nachdem, was einem der Internet-Provider so bietet, kann man jedoch auch eine richtige Domain auf seinen heimischen Server holen. Hierzu muss man dem Nameserver des Providers sagen, daß dieser statt des normalen Eintrags einen CNAME-Eintrag vornehmen soll. Als Ziel gibt man einfach den dynamischen DNS-Namen an.
Mein Provider erlaubt CNAMEs nicht für die Haupt- sondern nur für Subdomains. Deshalb habe ich die Subdomain "www.hauptdomain.de" per CNAME umgeleitet und die Hauptdomain auf ein normales Verzeichnis bei meinem Provider gelassen, dort allerdings keine Webseite installiert, sondern nur eine einsame Datei namens ".htaccess" mit folgendem Inhalt:
Redirect / http://www.hauptdomain.de
Jetzt wird "hauptdomain.de" umgeleitet auf "www.hauptdomain.de", was dann von meinem heimischen Apache per virtual Host erkannt wird.
Die Geschwindigkeit dieser Webseiten ist übrigens trotz einer ganz normalen DSL-6000-Leitung sehr annehmbar. Kritisch dürfte es lediglich werden, wenn man viele Benutzer gleichzeitig hat, aber für normale Heim- und kleinere gewerbliche Seiten dürfte es voll reichen.
Wessen Provider das nicht mitmachen, der kann mich gerne mal fragen. Ich kann bei mir ohne grossen Aufwand weitere Domains aufschalten. -- ThomasBayen