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
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
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:
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
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
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.