Wie man Apache Virtual Hosts unter Ubuntu 22.04 konfiguriert

Das Konzept des virtuellen Hostings wird von Unternehmen genutzt, um mehrere Websites auf einem einzigen Rechner zu hosten. Dies kann entweder durch eine „IP-basierte“ Methode oder durch einen „namensbasierten“ Ansatz erreicht werden. Beim „IP-basierten“ Hosting haben wir für jede Website eine eigene IP-Adresse. Beim „namensbasierten“ Hosting haben wir mehrere Namen, die auf jeder IP-Adresse laufen.

Was werden wir behandeln?

In diesem Lernprogramm werden wir sehen, wie wir zwei virtuelle Hosts auf einem Ubuntu 22.04-System mit Hilfe von namensbasiertem virtuellem Hosting hosten können. Wir werden den Apache-Webserver verwenden.

Fang jetzt an…

Schritt 1. Aktualisiere das Repository und auch das Betriebssystem:

sudo apt update
sudo apt upgrade -y

Schritt 2. Installiere den Apache Webserver für Ubuntu mit dem Befehl:

sudo apt install apache2 -y

Apache installieren
Schritt 3. Starte den Apache-Webserver neu und überprüfe seinen Status, indem du ihn ausführst:

sudo systemctl restart apache2
sudo systemctl status apache2

Neustart des Apache-Dienstes

Beispielhafte Ausgabe:

? apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
     Active: active (running) since Mon 2022-06-27 09:32:14 UTC; 18s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 13093 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/S>
   Main PID: 13098 (apache2)
      Tasks: 55 (limit: 1146)
     Memory: 4.7M
        CPU: 25ms
     CGroup: /system.slice/apache2.service
             ??13098 /usr/sbin/apache2 -k start
             ??13099 /usr/sbin/apache2 -k start
             ??13100 /usr/sbin/apache2 -k start

Schritt 4. Erstelle zwei neue Verzeichnisse innerhalb des Ordners „www“. Nenne diese Verzeichnisse host1 und host2.

Erstelle innerhalb dieser Verzeichnisse einen weiteren Ordner mit den Namen public_html und public_html für deine Webdateien. Diese Verzeichnisse werden die entsprechenden index.html-Dateien für diese beiden Hosts enthalten:

sudo mkdir -p /var/www/host1/public_html
sudo mkdir -p /var/www/host2/public_html

Die Verzeichnisse „/var/www/host1/public_html“ und „/var/www/host2/public_html“ stellen auch den Dokumentenstamm für die beiden virtuellen Hosts dar.

Schritt 5. Die oben erstellten Verzeichnisse gehören dem Benutzer root. Damit ein normaler Benutzer die Dateien in diesen Verzeichnissen ändern kann, muss der Eigentümer mit den folgenden Befehlen geändert werden:

sudo chown -R $USER:$USER /var/www/host1/public_html
sudo chown -R $USER:$USER /var/www/host2/public_html

Die Variable „$USER“ wird den Wert des aktuell angemeldeten Benutzers übernehmen. Das Verzeichnis „public_html“ gehört nun diesem Benutzer.

Schritt 6. Setze nun die Leseberechtigung für das allgemeine Webverzeichnis von Apache:

sudo chmod -R 755 /var/www

Schritt 7. Jetzt legen wir für jeden virtuellen Host eine Standardseite fest, z. B. index.html. Das kannst du direkt im Terminal mit dem Befehl „echo“ machen. Für virtuellen Host1:

sudo echo “Welcome to Virtual Host 1.” > /var/www/host1/public_html/index.html

Für den virtuellen Host2:

sudo echo “Welcome to Virtual Host 2.” > /var/www/host2/public_html/index.html

Schritt 8. Bevor wir weitermachen, machen wir einen Zwischenschritt. Hier ändern wir die Hosts-Datei, um die lokale Host-Adresse den beiden virtuellen Host-Domänennamen zuzuordnen: www.host1.com und www.host2.com. Damit wollen wir vermeiden, dass unsere Domänennamen öffentlich registriert werden.

sudo sh -c "echo 127.0.0.1 www.host1.com >> /etc/hosts"
sudo sh -c "echo 127.0.0.1 www.host2.com >> /etc/hosts"

Die oben genannten Schritte sind in der Abbildung unten dargestellt:

Vorbereiten der virtuellen Hosts
Schritt 9. Jetzt erstellen wir zwei Virtual-Host-Dateien für jeden unserer virtuellen Hosts. Diese sind ähnlich wie die Apache-Standardkonfigurationsdatei („000-default.conf“). Diese Dateien stellen die Konfiguration für unsere virtuellen Hosts dar und regeln auch, wie die verschiedenen Domain-Anfragen vom Apache-Webserver beantwortet werden.

Die Datei „000-default.conf“ kann als Basisdatei für jeden virtuellen Host verwendet werden. Kopiere diese Datei einfach an denselben Ort mit zwei verschiedenen Namen: host1.conf und host2.conf:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/host1.conf
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/host2.conf

Schritt 10. Öffne nun die Dateien und ändere sie für jeden virtuellen Host. Für den virtuellen Host1 sollten z.B. die folgenden Parameter wie folgt geändert werden:

<VirtualHost *:80>
  ServerAdmin admin@host1.com
  ServerName host1
  ServerAlias www.host1.com
  DocumentRoot /var/www/host1/public_html
  ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>

Ersetze in der zweiten Datei (host2.conf) die Einträge für host1 durch die für host2. Alternativ kannst du auch zwei neue Dateien erstellen und den obigen Inhalt für jeden virtuellen Host eingeben. Die Datei host2.conf sieht dann so aus:

<VirtualHost *:80>
  ServerAdmin admin@host2.com
  ServerName host2
  ServerAlias www.host2.com
  DocumentRoot /var/www/host2/public_html
  ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>

Schritt 10. Nachdem wir nun die Dateien für die virtuellen Hosts erstellt haben, ist es an der Zeit, diese Dateien tatsächlich zu aktivieren. Zu diesem Zweck bietet der Apache ein Tool namens „a2ensite“. Benutze den folgenden Befehl, um sie zu aktivieren:

sudo a2ensite host1.conf
sudo a2ensite host2.conf

Schritt 11. Im Terminal erscheint die Meldung, dass du Apache neu laden sollst, um die neue Konfiguration zu aktivieren, aber vorher musst du die Standard-Site mit dem Befehl „000-default.conf“ deaktivieren:

sudo a2dissite 000-default.conf

Schritt 12. Überprüfe die Konfigurationsdateien auf Syntaxfehler mit:

sudo apache2ctl configtest

Schritt 13. Zum Schluss lädst du den apache2-Dienst neu, um die oben vorgenommenen Änderungen zu übernehmen:

sudo systemctl reload apache2

(1) Aktiviere Host1 und Host2 (2) Deaktiviere die Standardseite (3) Lade Apache neu

Testen der Apache vhost-Einrichtung

Jetzt werden wir überprüfen, ob alles richtig eingerichtet ist. Öffne ein Terminal auf deinem Rechner und führe den Befehl aus:

$ curl www.host1.com

Der obige Befehl sollte die Nachricht von der Indexseite des virtuellen Hosts1 zurückgeben, der unten stehende Befehl sollte die Nachricht des virtuellen Hosts2 anzeigen:

$ curl www.host2.com

Testen der Einrichtung

Fazit

Wir haben es endlich geschafft, unser virtuelles Hosting funktioniert wie erwartet. Wir können dieses Tutorial auch mit Terraform durchführen, probiere es einfach aus.

Das könnte dich auch interessieren …