Apache virtuele hosts te configureren op Ubuntu 22.04

Het virtual hosting concept wordt door bedrijven gebruikt om meerdere websites te hosten met behulp van een enkele machine. Het kan worden bereikt door een ‘IP-gebaseerde’ methode of een ‘naamgebaseerde’ benadering. Bij ‘IP-based’ hosting hebben we aparte IP-adressen voor elke website. Bij ‘name-based’ hosting hebben we meerdere namen op elk IP-adres.

Wat zullen we behandelen?

In deze tutorial zullen we zien hoe we twee virtuele hosts kunnen hosten op een Ubuntu 22.04 systeem met behulp van naamgebaseerde virtuele hosting. We zullen de Apache webserver gebruiken.

Ga nu aan de slag…

Stap 1. Update de repository en ook het besturingssysteem:

sudo apt update
sudo apt upgrade -y

Stap 2. Installeer Apache webserver voor Ubuntu met behulp van het commando:

sudo apt install apache2 -y

Installing Apache
Stap 3. Herstart de Apache webserver en controleer de status ervan door uit te voeren:

sudo systemctl restart apache2
sudo systemctl status apache2

Apache dienst herstarten

Voorbeelduitvoer:

? 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

Stap 4. Maak twee nieuwe mappen in de map ‘www’. Laat deze mappen host1 en host2 zijn.

Maak binnen deze mappen nog een map aan voor je webbestanden. Laat deze mappen public_html en public_html zijn. Deze directories zullen de overeenkomstige index.html bestanden bevatten voor deze twee hosts:

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

De directories ‘/var/www/host1/public_html’ en ‘/var/www/host2/public_html’ vormen ook de document root voor de twee virtuele hosts.

Stap 5. De hierboven aangemaakte mappen zijn eigendom van de root gebruiker. Om een gewone gebruiker de bestanden in deze mappen te laten wijzigen, moet het eigendom worden veranderd met de commando’s:

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

De variabele ‘$USER’ zal de waarde van de huidige ingelogde gebruiker gebruiken. De ‘public_html’ wordt nu eigendom van deze gebruiker.

Stap 6. Stel nu voor de apache general web directory ‘leestoegang’ in:

sudo chmod -R 755 /var/www

Stap 7. Nu stellen we een standaard pagina in, namelijk index.html, voor elke virtuele host. Dit kan rechtstreeks vanaf de terminal met het commando ‘echo’. Voor virtuele host1:

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

Voor virtuele host2:

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

Stap 8. Voordat we verder gaan, gebruiken we een tussenstap. Hier wijzigen we het hosts bestand om het lokale host adres te mappen naar de twee virtuele host domeinnamen: www.host1.com en www.host2.com. Dit wordt gedaan om te voorkomen dat onze domeinnamen publiekelijk geregistreerd worden.

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"

De bovenstaande stappen staan in de afbeelding hieronder:

De virtuele hosts voorbereiden
Stap 9. We gaan nu twee Virtual host bestanden aanmaken voor elk van onze virtuele hosts. Deze zijn vergelijkbaar met het apache default config bestand(“000-default.conf”). Nu zullen deze bestanden de configuratie weergeven die gebruikt moet worden voor onze virtuele hosts en ook bepalen hoe de verschillende domeinverzoeken worden beantwoord door een Apache webserver.

De “000-default.conf” kan worden gebruikt als basisbestand voor elke virtuele host. Kopieer dit bestand gewoon naar dezelfde locatie met twee verschillende namen: host1.conf en 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

Stap 10. Open nu de bestanden en wijzig ze voor elke virtuele host. Bijvoorbeeld, voor virtuele host1 moeten de volgende parameters worden gewijzigd als:

<VirtualHost *:80>
ServerAdmin [email protected]

ServerName host1

ServerAlias www.host1.com

DocumentRoot /var/www/host1/public_html

ErrorLog ${APACHE_LOG_DIR}/error.log

</VirtualHost>

Vervang voor het tweede bestand(host2.conf) de host1 entries door die van host2. Je kunt ook twee nieuwe bestanden maken en de bovenstaande inhoud invoeren die overeenkomt met elke virtuele host. Het bestand host2.conf ziet er dan als volgt uit:

<VirtualHost *:80>
ServerAdmin [email protected]

ServerName host2

ServerAlias www.host2.com

DocumentRoot /var/www/host2/public_html

ErrorLog ${APACHE_LOG_DIR}/error.log

</VirtualHost>

Stap 10. Nu we de virtuele host-bestanden hebben aangemaakt, is het tijd om deze bestanden daadwerkelijk in te schakelen. Hiervoor levert Apache een hulpmiddel genaamd ‘a2ensite’. Gebruik onderstaand commando om ze in te schakelen:

sudo a2ensite host1.conf
sudo a2ensite host2.conf

Stap 11. Op de terminal zie je een bericht om apache te herladen om de nieuwe configuratie te activeren, maar schakel daarvoor de standaardsite, vertegenwoordigd door “000-default.conf”, uit met het commando:

sudo a2dissite 000-default.conf

Stap 12. Controleer de config-bestanden op syntaxfouten met behulp van:

sudo apache2ctl configtest

Stap 13. Herlaad tenslotte de apache2 service om de bovenstaande wijzigingen toe te passen:

sudo systemctl reload apache2

(1) Schakel Host1 en Host2 in (2) Schakel de standaardsite uit (3) Herlaad Apache

Testen van de Apache vhost Setup

We gaan nu controleren of alles correct is ingesteld. Open een terminal op je machine en voer het commando uit:

$ curl www.host1.com

Het bovenstaande commando zou het bericht van de virtuele host1 indexpagina moeten weergeven, evenzo zou het onderstaande commando het bericht van de virtuele host2 moeten weergeven:

$ curl www.host2.com

De opstelling testen

Conclusie

We zijn er eindelijk uit, onze virtuele hosting werkt zoals verwacht. We kunnen deze tutorial ook uitvoeren met Terraform, probeer het maar eens uit.