Zoeken op website

Hoe Apache Virtual Hosts op een Ubuntu-server in te stellen


Inleiding

De Apache HTTP-server is een populaire open-source webserver die flexibiliteit, kracht en brede ondersteuning voor ontwikkelaars biedt. De configuratie van de Apache-server vindt niet plaats in één enkel monolithisch bestand, maar gebeurt in plaats daarvan via een modulair ontwerp waarbij nieuwe bestanden kunnen worden toegevoegd en aangepast indien nodig. Binnen dit modulaire ontwerp kun je een individuele site of domein maken, genaamd een virtual host.

Met virtuele hosts kan één Apache-instantie meerdere websites bedienen. Elke domein of individuele site die met Apache is geconfigureerd, leidt de bezoeker naar een specifieke map die de informatie van die site bevat. Dit gebeurt zonder dat de bezoeker merkt dat dezelfde server ook verantwoordelijk is voor andere sites. Dit schema is uitbreidbaar zonder softwarelimiet, zolang uw server het verkeer aankan.

In deze gids stel je Apache virtual hosts in op een Ubuntu-server. Tijdens dit proces leer je hoe je verschillende inhoud aan verschillende bezoekers kunt aanbieden, afhankelijk van welke domeinen ze opvragen, door twee virtual host-sites te creëren.

Gevalideerd op recente Ubuntu-versies: De stappen en commando's in deze tutorial zijn geverifieerd op Ubuntu 20.04 LTS, 22.04 LTS en 24.04 LTS. De configuratiestructuur van Apache (sites-available, sites-enabled, a2ensite, a2dissite) en de hier gebruikte mappenstructuur zijn hetzelfde in deze versies.

Belangrijkste punten

  • Virtuele hosts laten één Apache-instance meerdere sites bedienen; elk domein verwijst naar zijn eigen documentroot.
  • Je maakt een directory aan onder /var/www per site (bijvoorbeeld /var/www/your_domain/public_html) en stelt eigendom en permissies in zodat de webserver de bestanden kan lezen en jouw gebruiker ze kan bewerken.
  • Elke site krijgt een eigen configuratiebestand in /etc/apache2/sites-available/ met ServerName, ServerAlias en DocumentRoot.
  • Gebruik a2ensite en a2dissite om sites in of uit te schakelen, en herstart of herlaad daarna Apache zodat de wijzigingen van kracht worden.
  • Je kunt testen zonder echte DNS door je lokale hosts-bestand te bewerken zodat je voorbeelddomeinen naar het server-IP wijzen.

Vereisten

Voordat je aan deze tutorial begint, heb je nodig:

  • Een Ubuntu-server met een niet-root gebruiker met sudo-rechten. Je kunt onze handleiding 'Initiële serversetup met Ubuntu' gebruiken om dit in te stellen.
  • Apache is geïnstalleerd op de server. Je kunt leren hoe door de stappen 1-3 in onze handleiding 'Hoe de Apache-webserver op Ubuntu te installeren' te volgen.

Als je Linux-Console.net gebruikt, kun je leren hoe je domeinen instelt door onze productdocumentatie te volgen, Hoe domeinen toe te voegen en in te stellen.

Om deze tutorial succesvol te voltooien, heeft u twee domeinen nodig met:

  • Een A-record met your_domain dat verwijst naar het publieke IP-adres van uw server.
  • Een A-record met www.jouw_domein dat verwijst naar het openbare IP-adres van je server.

Voor andere aanbieders kunt u hun relevante productdocumentatie raadplegen.

Opmerking: Als je op dit moment geen domeinen beschikbaar hebt, kun je testwaarden lokaal op je computer gebruiken. Stap 6 van deze handleiding laat je zien hoe je je testwaarden kunt testen en configureren. Dit stelt je in staat om je configuratie te valideren, ook al is je inhoud niet beschikbaar voor andere bezoekers via de domeinnaam.

Stap 1 — Het aanmaken van de mappenstructuur

De eerste stap is het maken van een mappenstructuur die de sitegegevens zal bevatten die je aan bezoekers gaat aanbieden.

Uw document root, de bovenste directory die Apache gebruikt om de inhoud te vinden die moet worden geserveerd, wordt ingesteld op afzonderlijke directories onder de /var/www directory. U zult hier een directory aanmaken voor elk van de virtuele hosts.

Binnen elk van deze mappen maak je een public_html-map aan. De public_html-map bevat de inhoud die aan je bezoekers wordt weergegeven. De bovenliggende mappen, hier genoemd your_domain_1 en your_domain_2, bevatten de scripts en applicatiecode ter ondersteuning van de webinhoud.

Gebruik deze opdrachten, met je eigen domeinnamen, om je mappen aan te maken:

sudo mkdir -p /var/www/your_domain_1/public_html

sudo mkdir -p /var/www/your_domain_2/public_html

Zorg ervoor dat je your_domain_1 en your_domain_2 vervangt door je eigen respectieve domeinen. Bijvoorbeeld, als een van je domeinen example.com zou zijn, zou je deze directorystructuur aanmaken: /var/www/example.com/public_html.

Stap 2 — Machtigingen verlenen

Je hebt de mappenstructuur voor je bestanden aangemaakt, maar ze behoren tot de root-gebruiker. Als je wilt dat je gewone gebruiker bestanden in deze webmappen kan aanpassen, kun je het eigendom veranderen met deze commando's:

sudo chown -R $USER:$USER /var/www/your_domain_1/public_html

sudo chown -R $USER:$USER /var/www/your_domain_2/public_html

De $USER variabele zal de waarde aannemen van de gebruiker waarmee je momenteel bent ingelogd wanneer je ENTER indrukt. Hierdoor wordt de reguliere gebruiker nu eigenaar van de public_html submappen waarin je je inhoud gaat opslaan.

U moet ook uw machtigingen aanpassen om ervoor te zorgen dat leesrechten zijn toegestaan voor de algemene webdirectory en alle bestanden en mappen die deze bevat, zodat de pagina's correct kunnen worden weergegeven:

sudo chmod -R 755 /var/www

Uw webserver heeft nu de benodigde rechten om content te serveren, en uw gebruiker zou in staat moeten zijn om content aan te maken binnen de benodigde mappen. De volgende stap is het creëren van content voor uw virtual host-sites.

Stap 3 — Standaardpagina's maken voor elke virtuele host

Met je directorystructuur op zijn plaats kun je beginnen met je te concentreren op elke individuele virtuele hostsite en de inhoud binnen die site. Begin met het maken van een index.html-pagina voor je eerste site your_domain_1.

Open en maak het index.html-bestand aan met je favoriete tekstbewerker. Dit voorbeeld gebruikt nano:

nano /var/www/your_domain_1/public_html/index.html

Maak binnen dit bestand een HTML-bestand dat bezoekers aangeeft met welke site ze verbonden zijn:

<html>
  <head>
    <title>Welcome to your_domain_1!</title>
  </head>
  <body>
    <h1>Success! The your_domain_1 virtual host is working!</h1>
  </body>
</html>

Om het bestand op te slaan en te sluiten in nano, begin je door CTRL+X in te drukken. Druk op Y wanneer je wordt gevraagd het bestand op te slaan, en druk vervolgens op ENTER wanneer je klaar bent om af te sluiten.

Kopieer vervolgens dit bestand om als basis voor je tweede site te gebruiken door te typen:

cp /var/www/your_domain_1/public_html/index.html /var/www/your_domain_2/public_html/index.html

Open vervolgens dit nieuwe bestand en pas de relevante informatie aan met je teksteditor zoals eerder:

nano /var/www/your_domain_2/public_html/index.html
<html>
  <head>
    <title>Welcome to your_domain_2!</title>
  </head>
  <body> <h1>Success! The your_domain_2 virtual host is working!</h1>
  </body>
</html>

Sla dit bestand op en sluit het. U heeft nu één pagina voor elke site die u kunt gebruiken om de configuratie van de virtuele host te testen.

Stap 4 — Nieuwe Virtual Host-bestanden aanmaken

Virtuele hostbestanden specificeren de feitelijke configuratie van je virtuele hosts en bepalen hoe de Apache-webserver reageert op verschillende domeinverzoeken. Voor meer informatie over de indeling en globale opties van Apache, zie Hoe je de Apache-webserver configureert op een Ubuntu- of Debian-VPS.

Apache wordt geleverd met een standaard virtual host-bestand genaamd 000-default.conf. Je kunt dit bestand kopiëren om virtual host-bestanden voor elk van je domeinen te maken.

Kopieer het standaardconfiguratiebestand naar het eerste domein:

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

Houd er rekening mee dat de standaardconfiguratie van Ubuntu vereist dat elk virtual host-bestand eindigt op .conf.

Open het nieuwe bestand in je favoriete teksteditor met root-rechten:

sudo nano /etc/apache2/sites-available/your_domain_1.conf

Zonder opmerkingen zal het bestand er ongeveer zo uitzien:

<VirtualHost *:80>
  ...
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
   ...
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Binnen dit bestand kunt u de items voor uw eerste domein aanpassen en enkele extra richtlijnen toevoegen. Deze virtuele hostsectie komt overeen met alle verzoeken die worden gedaan op poort 80, de standaard HTTP-poort.

Verander eerst de ServerAdmin-directive naar een e-mailadres waar de sitebeheerder e-mails op kan ontvangen:

ServerAdmin admin@your_domain_1

Voeg hierna twee extra instructies toe. De eerste, genaamd ServerName, stelt het basistomein voor de virtuele hostdefinitie vast. De tweede, genaamd ServerAlias, definieert extra namen die moeten overeenkomen alsof het de basismnaam is. Dit is handig om extra hosts te laten matchen die je hebt gedefinieerd. Bijvoorbeeld, als je de ServerName-instructie instelt op example.com, kun je een ServerAlias definiëren voor www.example.com, en beide wijzen naar het IP-adres van deze server.

Voeg deze twee richtlijnen toe aan je configuratiebestand na de regel ServerAdmin:

<VirtualHost *:80>
  ...
    ServerAdmin admin@your_domain_1
    ServerName your_domain_1
    ServerAlias www.your_domain_1
    DocumentRoot /var/www/html
    ...
</VirtualHost>

Wijzig vervolgens de locatie van uw virtual host-bestand voor de document root van dit domein. Bewerk de DocumentRoot-richtlijn zodat deze verwijst naar de directory die u voor deze host hebt aangemaakt:

DocumentRoot /var/www/your_domain_1/public_html

Hier is een voorbeeld van het virtual host-bestand met alle bovengenoemde aanpassingen:

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

Sla het bestand op en sluit het.

Maak uw tweede configuratiebestand door het bestand van uw eerste virtual host-site te kopiëren:

sudo cp /etc/apache2/sites-available/your_domain_1.conf /etc/apache2/sites-available/your_domain_2.conf

Open het nieuwe bestand in je favoriete editor:

sudo nano /etc/apache2/sites-available/your_domain_2.conf

U moet nu alle informatie aanpassen zodat deze verwijst naar uw tweede domein. Als u klaar bent, zou het er zo uit moeten zien:

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

Sla het bestand op en sluit het wanneer je klaar bent.

Stap 5 — De nieuwe virtuele hostbestanden inschakelen

Nu je je virtual host-bestanden hebt gemaakt, moet je ze inschakelen. Apache bevat enkele hulpmiddelen waarmee je dit kunt doen.

Je zult de a2ensite-tool gebruiken om elk van je sites in te schakelen. Als je meer over dit script wilt lezen, kun je de a2ensite man-pagina raadplegen.

Gebruik de volgende opdrachten om uw virtuele hostsites in te schakelen:

sudo a2ensite your_domain_1.conf

sudo a2ensite your_domain_2.conf

Er zal output zijn voor beide sites, vergelijkbaar met het onderstaande voorbeeld, die je eraan herinnert je Apache-server te herladen:

Enabling site example.com.
To activate the new configuration, you need to run:
  systemctl reload apache2

Schakel voordat u uw server opnieuw opstart de standaardsite uit die is gedefinieerd in 000-default.conf door het commando a2dissite te gebruiken:

sudo a2dissite 000-default.conf
Site 000-default disabled.
To activate the new configuration, you need to run:
  systemctl reload apache2

Test vervolgens op configuratiefouten:

sudo apache2ctl configtest

Je zou de volgende uitvoer moeten ontvangen:

. . .
Syntax OK

Wanneer je klaar bent, start je Apache opnieuw om deze wijzigingen door te voeren.

sudo systemctl restart apache2

Optioneel kunt u de status van de server controleren na al deze wijzigingen met dit commando:

sudo systemctl status apache2

Je server zou nu ingesteld moeten zijn om twee websites te bedienen. Als je echte domeinnamen gebruikt, kun je Stap 6 overslaan en doorgaan naar Stap 7. Als je je configuratie lokaal test, volg dan Stap 6 om te leren hoe je je setup op je lokale computer kunt testen.

Stap 6 — (Optioneel) Het instellen van het lokale hosts-bestand

Als je geen echte domeinnamen die je bezit hebt gebruikt om deze procedure te testen en in plaats daarvan voorbeeld-domeinen hebt gebruikt, kun je de functionaliteit van je virtuele host-sites nog steeds testen door tijdelijk het hosts-bestand op je lokale computer aan te passen. Dit zal alle verzoeken voor de domeinen die je hebt geconfigureerd onderscheppen en naar je Virtual Private Server (VPS) wijzen, net zoals het DNS-systeem zou doen als je geregistreerde domeinen zou gebruiken. Dit werkt alleen vanaf je lokale computer en is alleen voor testdoeleinden.

Zorg ervoor dat je deze stappen op je lokale computer uitvoert en niet op je VPS-server. Je moet het beheerderswachtwoord van de computer weten of anders lid zijn van de beheerdersgroep.

Als je op een Mac- of Linux-computer bent, bewerk je je lokale bestand met beheerdersrechten door te typen:

sudo nano /etc/hosts

Als je een Windows-computer gebruikt, open dan de Opdrachtprompt en typ:

notepad %windir%\system32\drivers\etc\hosts

De gegevens die je moet toevoegen zijn het openbare IP-adres van je server, gevolgd door het domein dat je wilt gebruiken om die server te bereiken. Als je de domeinen gebruikt die in deze gids worden gebruikt en je server-IP vervangt door de tekst your_server_IP, zou je bestand er als volgt uit moeten zien:

127.0.0.1   localhost
127.0.1.1   guest-desktop
your_server_IP your_domain_1
your_server_IP your_domain_2

Dit zal alle verzoeken voor uw twee domeinen op uw computer doorsturen en naar uw server op het opgegeven IP-adres sturen.

Sla het bestand op en sluit het.

Stap 7 — Je resultaten testen

Nu je je virtuele hosts hebt geconfigureerd, kun je je setup testen door naar de domeinen te gaan die je in je webbrowser hebt geconfigureerd:

http://your_domain_1

Je kunt ook je tweede hostpagina bezoeken en het bestand bekijken dat je voor je tweede site hebt aangemaakt:

http://your_domain_2

Als beide sites naar verwachting werken, heb je met succes twee virtuele hosts op dezelfde server geconfigureerd.

Opmerking: Als je het hosts-bestand van je lokale computer hebt aangepast, zoals in Stap 6 van deze handleiding, wil je misschien de toegevoegde regels nu verwijderen, nu je hebt geverifieerd dat je configuratie werkt. Dit zal voorkomen dat je hosts-bestand wordt gevuld met vermelding die niet langer nodig zijn.

Veelgestelde vragen

1. Wat zijn Apache Virtual Hosts?

Apache Virtual Hosts zijn een manier om meer dan één website op een enkele Apache-server te draaien. Elke virtual host heeft zijn eigen domein (of subdomein), document root en instellingen. Bezoekers zien alleen de site voor het domein dat zij opvragen; ze zien niet dat er andere sites op dezelfde server staan.

2. Hoeveel virtuele hosts kan Apache aan?

Apache beperkt het aantal virtuele hosts niet. Je kunt er zoveel toevoegen als je server aan middelen aankan. Elke nieuwe site heeft zijn eigen configuratiebestand nodig in /etc/apache2/sites-available/, een eigen map onder /var/www, en vervolgens schakel je deze in met a2ensite en herlaad je Apache.

3. Wat is het verschil tussen ServerName en ServerAlias?

De ServerName en ServerAlias directieven geven aan op welke hostnamen Apache moet reageren voor elke virtuele host, maar ze hebben enigszins verschillende doeleinden:

RichtlijnBeschrijvingVoorbeeld
ServerName
De belangrijkste, canonieke hostnaam voor de virtuele host. Apache komt deze naam exact tegen.
example.com
ServerAlias
Alternatieve hostnamen die ook naar deze virtuele host verwijzen, inclusief jokertekens.
www.example.com, *.example.com

Hoe werkt het?

  • Gebruik ServerName voor het hoofddomein.
  • Gebruik ServerAlias voor andere hostnamen (zoals www.-versies of subdomeinen) die dezelfde site-inhoud moeten weergeven.

Elke aanvraag die overeenkomt met de ServerName of een van de ServerAlias-vermeldingen wordt bediend door die virtuele host. Voor meer informatie, zie de officiële Apache-documentatie over virtuele hosts.

4. Heb ik een domeinnaam nodig voor virtuele hosts?

Je hebt geen geregistreerd domein nodig om deze handleiding te volgen. Je kunt voorbeeldhostnamen gebruiken en ze naar je server laten wijzen door het hosts-bestand op je computer te bewerken (zie stap 6). Voor een site die anderen via het internet zullen bereiken, heb je een echt domein en DNS-records nodig die het naar je server wijzen. Als je Linux-Console.net gebruikt, kun je domeinen toevoegen en beheren in het controlepaneel; zie onze DNS-quickstart voor hoe je een domein kunt toevoegen.

5. Waar worden Apache virtual host-bestanden opgeslagen?

Op Ubuntu en Debian bevinden de configuraties van virtuele hosts zich in /etc/apache2/sites-available/. Elke site heeft daar een .conf-bestand (bijvoorbeeld example.com.conf). Het inschakelen van een site met a2ensite voegt een symlink toe in /etc/apache2/sites-enabled/ die naar dat bestand wijst. De standaardsite die reageert wanneer geen andere host overeenkomt, is 000-default.conf.

Conclusie

Je hebt nu één server die twee afzonderlijke domeinnamen afhandelt. Je kunt dit proces uitbreiden door de bovengenoemde stappen te volgen om extra virtuele hosts toe te voegen. Er is geen softwarelimiet voor het aantal domeinnamen dat Apache kan verwerken, dus voel je vrij om zoveel virtuele hosts aan te maken als je server aankan.

Volgende stappen en gerelateerde bronnen

  • Maak Apache veiliger en voeg HTTPS toe: Nadat de virtuele hosts werken, kun je TLS toevoegen met Hoe Apache te beveiligen met Let’s Encrypt op Ubuntu en de server afstemmen met Hoe de Apache-webserver te configureren op een Ubuntu of Debian VPS.
  • Volledige LAMP-stack: Om MySQL en PHP op dezelfde Ubuntu-server toe te voegen, volg je Hoe je een LAMP-stack installeert op Ubuntu.
  • Linux-Console.net producten: Gebruik Droplets om Ubuntu en Apache te draaien, en DNS om domeinrecords te beheren en je domeinen naar je server te verwijzen. Productdocumentatie: Voeg een domein toe (DNS snelstartgids).

Bedankt dat je hebt geleerd met de Linux-Console.net Community.