Beim Web-Entwickeln stößt man ab und zu auf das Problem, dass man zum Testen auf seinem Apache2-Webserver schnell mal zwei separate Domainen benötigt, um typische Situation bei Web-Providern nachzustellen: 
Auf den gehosteten Servern findet man regelmäßig Verhältnisse vor, bei denen einem in einer abgekapselten “chroot”-Umgebung zwei oder mehr Verzeichnisse bereitgestellt werden, denen dann unterschiedliche Domainen zugeordnet sid oder zugeordnet werden können. Und als Entwickler möchte man gerne domainenübergreifende PHP-Klassenbibliotheken in Verzeichnissen außerhalb der eigentlichen Domainen installieren und testen, ob die Klassen auch ordentlich in allen Domainen gezogen werden …. oder man hat mit ähnlichen domainübergreifenden Problemstellungen zu tun …..(Dass man Bibliotheken in domainunabhängigen, übergeordneten Verzeichnissen des Webservers installiert, hat seinen Grund übrigens nicht nur in der Vermeidung von Doppelpflege, sondern es dient u.U. auch der Sicherheit.)   
Möchte man ähnliche Situationen auf einem eigenen Apache-Server nachstellen, greift man am besten – wie der Webprovider auch – zu namensbasierten virtuellen Domainen.
Das folgende einfache Beispiel zeigt, wie man zwei solcher zusätzlicher Domainen auf einem Opensuse-System einrichten kann und wie man dafür sorgt, dass der ursprüngliche Zugriff auf den Server erhalten bleibt. Wir gehen von folgendem Szenario aus: Es laufe ein Webserver unter der beispielhaften Adresse “server.mydomain.de”. Ihm sei die IP-Adresse “192.168.0.10” zugeordnet. Die DNS-Einstellungen im Netzwerk seien so, dass man den Webserver unter “http://server.mydomain.de” oder “http.//server” erreicht. Der Web-Server selbst sei im Moment so eingerichtet, dass in der Haupt-Konfigurations-Datei  
/etc/apache2/http.conf 
über eine inkludierte Datei die erforderlichen Port- und SSL-Einstellungen des Webservers vorgegeben werden. Das entsprechende Include-Statement in der httpd.conf findet sich meist an deren Anfang    
Include /etc/apache2/listen.conf
Später werde auch die Default-Konfiguration des Servers über eine weitere Konfigurationsdatei (globale Einstellungen für den Defaultserver) in die “httpd.conf” geladen. Dies geschieht z.B. über den Eintrag 
Include /etc/apache2/default-server.conf
Ein nachfolgender Eintrag in der httpd.conf sorge dafür, dass Definitionen für virtuelle Domainen aus dem Verzeichnis “/etc/apache2/vhosts.d” geladen werden, sobald wir (s.u.) solche Definitionen angelegt haben: 
Include /etc/apache2/vhosts.d/*.conf
Auf andere Einträge in der Datei “httpd.conf” gehen wir im Moment nicht ein, da sie hier nicht von direkter Bedeutung sind.
Folgende Einträge in der “default-server.conf” sorgen vor der Umstellung auf virtuelle Domainen für den reibungslosen Betrieb.   
DocumentRoot “/srv/www/htdocs”
<Directory “/srv/www/htdocs”>
     AllowOverride None
     Order allow,deny
     Allow from all
</Directory>
Alias /icons/ “/usr/share/apache2/icons/”
<Directory “/usr/share/apache2/icons”>
     Options Indexes MultiViews
    	AllowOverride None
    	Order allow,deny
    	Allow from all
</Directory>
ScriptAlias /cgi-bin/ “/srv/www/cgi-bin/”
<Directory “/srv/www/cgi-bin”>
    	AllowOverride None
    	Options +ExecCGI -Includes
    	Order allow,deny
    	Allow from all
</Directory>
<IfModule mod_userdir.c>
    	UserDir public_html
    	Include /etc/apache2/mod_userdir.conf
</IfModule>
Include /etc/apache2/conf.d/*.conf
Include /etc/apache2/conf.d/apache2-manual?conf
Diese Einstellungen können
später pro virtueller Domaine überschrieben werden. Das Apache2-Konzept ist hier sehr modular. 
Einrichtung der virtuellen Domainen 
Nun richten wir uns 3 virtuelle Domainen ein. Zwei davon werden zwei speziellen Verzeichnissen zugeordnet; die dritte ersetzt den bisherigen “Default-Server”. Die dritte virtuelle Default-Domaine ist deshalb wichtig und notwendig, 
- weil bei einem “namebased virtual server” zunächst keine Default-Domaine existiert und der Standard-Default-Server keine Wirkung mehr hat und
 
- weil  man die bisherigen User des Servers nicht dazu zwingen will, ihre Lesezeichen in Ihren Browsern grundlegend zu ändern.
 
Diese dritte Domaine darf in einer professionell genutzten Umgebung bei der Umstellung nicht vergessen werden. 
Für die Umstellung ist zunächst ein Eintrag in der Datei “/etc/apache2/listen.conf” essentiell:   
NameVirtualHost 192.168.0.10:80
Nachdem wir das erledigt haben, erstellen wir im Verzeichnis “/etc/apache2/vhosts.d” eine Datei “virtu.conf” für eine virtuelle Domaine “virtu.mydomain.de” mit folgendem Inhalt  :
<VirtualHost 192.168.0.10:80>
        ServerAdmin your_admin_name@mydomain.de
        ServerName virtu.mydomain.de
        ServerAlias virtu
        DocumentRoot /srv/www/vitualdomains/virtu
        HostnameLookups Off
        UseCanonicalName Off
        ServerSignature On
        DirectoryIndex index.html index.html.var index.htm index.php index.php5
        <Directory “/srv/www/virtualdomains/virtu”>
        	Options Indexes FollowSymLinks
        	AllowOverride None
        	Order allow,deny
        	Allow from all
       </Directory>
</VirtualHost>
Beachten Sie den Eintrag zum “DirectoryIndex” und “ServerAlias”. Letzterer macht die neue Domaine auch über eine Abkürzung (http://virtu) anstelle des voll qualifizierten Domainnamens ansprechbar. Der “DirectoryIndex” spezifiziert, welche Dateien aufgerufen werden sollen, wenn als Http-Adresse nur die Domaine (also das Verzeichnis) angesprochen wird. Diese Vorgabe gilt aber auch für Subverzeichnisse. Einträge aus der Datei “default-server.conf” bleiben weiterhin gültig, soweit sie nicht überschrieben wurden. Eine weitere Domaine kann etwas so aussehen:               
<VirtualHost 192.168.0.10:80>
        ServerAdmin your_admin_name@mydomain.de
        ServerName virtual.mydomain.de
        ServerAlias virtual
        DocumentRoot /srv/www/vitualdomains/virtual
        HostnameLookups Off
        UseCanonicalName Off
        ServerSignature On
        DirectoryIndex index.html index.html.var index.htm index.php index.php5
        <Directory “/srv/www/virtualdomains/virtual”>
        	Options Indexes FollowSymLinks
        	AllowOverride None
        	Order allow,deny
        	Allow from all
        </Directory>
</VirtualHost>
Abschließend möchten wir noch den Server mit einer Default-Domaine ausstatten, die für alle sonstigen Zwecke aufgerufen wird, und die der ursprünglichen Serverkonfiguration entspricht: 
<VirtualHost 192.168.0.10:80>
        DocumentRoot /srv/www/htdocs
  &
nbsp;     DirectoryIndex index.html index.html.var index.htm index.php index.php5
        <Directory “/srv/www/htdocs”>
        	Options Indexes FollowSymLinks
        	AllowOverride None
        	Order allow,deny
        	Allow from all
        </Directory>
</VirtualHost>
Man erkennt, dass hier der “ServerName”-Eintrag fehlt !
Bleibt nur noch, auf unserem DNS-Server (oder auf dem Client-Rechner in der “/etc/hosts”-Datei) dafür zu sorgen, dass “virtu.mydomain.de” und “virtual.mydomain.de” im Netzwerk auch unter der Adresse “192.168.0.10” gefunden werden. Danach können wir den Webserver neu starten und erreichen in einem Browser über “http://virtu.mydomain.de” bzw. “http://virtual.mydomain.de” die neuen Domainen. Rufen wir nur “server.mydomain.de” oder “http://192.168.0.10” auf, so erhalten wir diejenigen Seiten, die auch auf dem urssprünglichen Server schon angezeigt wurden.
Viel Spaß mit den neuen Domainen!
Wenn es funktioniert, dann ist es an der Zeit, sich mit weiteren Varianten und Möglichkeiten von virtuellen Domainen auf einem Apache-Server auseinanderzusetzen. Das obige Beispiel war nur eine sehr einfache Lösung zu fester IP-Adresse und einheitlichem Port.