1. Home
  2. Linux
  3. Apache - MySQL - PHP
  4. Apache2: Name-based VirtualHost Support

Apache2: Name-based VirtualHost Support

Lesedauer: 4 Minuten

Wenn Sie auf einem Server mehr als eine Webseite betreiben möchten, bietet die virtuelle Hostkonfiguration zwei Möglichkeiten an. Virtuelle Hosts können IP-based sein, was bedeutet, dass jedes Webangebot eine andere IP besitzt, oder Name-based, was bedeutet, dass unter einer IP-Adresse mehrere Webseiten gehostet werden. Dieses Tutorial beschränkt sich auf die Verwendung von Name-based VirtualHosts.

Apache Installation (Debian)

Folgendes Kommando installiert den Apache Webserver auf einem Debian (11) System in der Basis-Minimal-Installation:

# apt install apache2 -y

Damit läuft bereits eine Apache-Instanz auf dem Server:

# systemctl status apache2
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-08-09 12:30:59 CEST; 1min 12s ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 1922 (apache2)
      Tasks: 55 (limit: 4679)
     Memory: 12.9M
        CPU: 54ms
     CGroup: /system.slice/apache2.service
             ├─1922 /usr/sbin/apache2 -k start
             ├─1924 /usr/sbin/apache2 -k start
             └─1925 /usr/sbin/apache2 -k start

Aug 09 12:30:59 kb01 systemd[1]: Starting The Apache HTTP Server...
Aug 09 12:30:59 kb01 systemd[1]: Started The Apache HTTP Server.

Document-Root erstellen und Berechtigungen anpassen

# mkdir /var/www/docu1.prontosystems.de /var/www/docu2.prontosystems.de
# chown -R www-data:www-data /var/www/docu1.prontosystems.de/ /var/www/docu2.prontosystems.de/
# chmod -R 755 /var/www/docu1.prontosystems.de/ /var/www/docu2.prontosystems.de/

Document-Root Content erstellen

Hier wird die eigentliche Webseite installiert. Im Falle eines Contentmanagement Systems wie zB WordPress würden hier die Dateien der WordPress Installation abgelegt werden. Zu Demonstrationszwecken wird hier an dieser Stelle nur eine index.html plaziert, die als Inhalt den jewiligen FQDN des virtuellen Hosts anzeigt:

# touch /var/www/docu1.prontosystems.de/index.html
# touch /var/www/docu2.prontosystems.de/index.html
<html>
 <head>
   <title>Welcome to the page docu1.prontosystems.de!</title>
 </head>
 <body>
   <h1>Congratulations! Your docu1.prontosystems.de server succeeded!</h1>
 </body>
</html>
<html>
 <head>
   <title>Welcome to the page docu2.prontosystems.de!</title>
 </head>
 <body>
   <h1>Congratulations! Your docu2.prontosystems.de server succeeded!</h1>
 </body>
</html>

Virtual-Host Konfigurationsdateien

Damit der Apache Webserver die verschiedenen Webseiten unterscheiden kann, wertet er den FQDN im HTTP-Request des HTTP-Headers aus und durchsucht seine Konfiguration nach einen passenden virtuellen Host, wertet das Document-Root Verzeichnis aus und zeigt den Inhalt an.

Erstellen Sie dazu in /etc/apache2/sites-available für jeden virtuellen Host eine Konfigurationsdatei mit entsprechend angepassten Inhalt:

/etc/apache2/sites-available# touch docu1.prontosystems.de.conf
/etc/apache2/sites-available# touch docu2.prontosystems.de.conf

Der Inhalt der Konfigurationsdatei entspricht dem folgendem Muster:

<VirtualHost *:80>
  ServerAdmin webmaster@prontosystems.de
  ServerName docu1.prontosystems.de
  DocumentRoot /var/www/docu1.prontosystems.de
  ErrorLog ${APACHE_LOG_DIR}/docu1.prontosystems.de_error.log
  CustomLog ${APACHE_LOG_DIR}/docu1.prontosystems.de_access.log combined
</VirtualHost>

Analog dazu das gleiche für den zweiten virtuellen Host entsprechend angepasst noch einmal:

<VirtualHost *:80>
  ServerAdmin webmaster@prontosystems.de
  ServerName docu2.prontosystems.de
  DocumentRoot /var/www/docu2.prontosystems.de
  ErrorLog ${APACHE_LOG_DIR}/docu2.prontosystems.de_error.log
  CustomLog ${APACHE_LOG_DIR}/docu2.prontosystems.de_access.log combined
</VirtualHost>

Das Asterisk * in der VirtualHost Direktive lässt den Apache Webserver für diesen virtuellen Host auf allen IP-Adressen des Servers lauschen. Hat der Server mehrere IP-Adressen und sie möchten das auf eine bestimmte einschränken, tauschen Sie das Asterisk gegen die IP-Adresse aus.

VirtualHost aktivieren

Abschließend werden die beiden neuen virtuellen Hosts aktiviert, die Default Seite deaktiviert und die Konfiguration gecheckt. Sie können die von Apache standardmäßige Default Webseite auch aktiviert lassen oder hier eine andere Seite pflegen. Apache zeigt bei einem fehlerhaftem HTTP-Request standardmäßig die erste Webseite der Konfiguration an:

# a2ensite docu1.prontosystems.de.conf 
Enabling site docu1.prontosystems.de.
To activate the new configuration, you need to run:
  systemctl reload apache2
# a2ensite docu2.prontosystems.de.conf 
Enabling site docu2.prontosystems.de.
To activate the new configuration, you need to run:
  systemctl reload apache2
# a2dissite 000-default.conf 
Site 000-default disabled.
To activate the new configuration, you need to run:
  systemctl reload apache2
# apachectl configtest
Syntax OK
# systemctl reload apache2

Vorausgesetzt Ihre DNS-Konfiguration ist korrekt, sollte Ihr Webserver jetzt die zwei unterschiedliche Webseiten ausliefern können:

Loading

Updated on 10. Oktober 2022
Was this article helpful?

Related Articles