Skip to main content

DNS en Virtual Hosts Theorie

DNS

Computers op het internet zijn verbonden via netwerken en om te weten welk netwerkpakketje naar welke computer moet worden en IP adressen gebruikt. Elke computer die is verbonden met een netwerk heeft een IP adres. Dit zijn nummers en die zijn lastig te onthouden. Daarom is er een soort "telefoonboek-systeem" waarbij een naam van een computer of een systeem kan worden omgezet naar een nummer. Dit heet systeem heet DNS. DNS staat voor Domain Name Server en het zorgt ervoor dat een naam van bijvoorbeeld een web site wordt opgezet naar een ip nummer.

Host file

Op Linux en Windows heb je een host file. Op Linux staat deze file in de /etc directory en onder Windows staat deze file in de folder c:\windows\system32\drivers\etc\.

De host file is een soort DNS systeem dat alleen werkt voor de machine waar die op staat. Stel je wilt naar ubuntu.local. In het grote DNS systeem van internet bestaat deze site niet, maar in je eigen host file kun je deze naam wel definiëren. Jouw eigen machine kijkt eerst of die een naam kan vinden in de host file. Als dat zo is dan gebruikt jouw machine het nummer zoals dat in de host file staat. Staat er niets in de host file dan wordt er pas aan DNS gevraagd of er een nummer bekend is.

De host file ziet er eenvoudig uit, bijvoorbeeld:

127.0.0.1       localhost
127.0.0.1       mysite

De eerste regel staat bijna in elke host file. Deze rgel is een mapping van localhost naar 127.0.0.1.  Zoals je weet wijst het ip nummer 127.0.0.1 altijd naar 'zichzelf'. Dat is een afspraak. In dit voorbeeld is mysite ook gemapped op 127.0.0.1. Of je dus localhost of mysite intypt in de browser maakt dan niet uit.

  • Wat is DNS?
  • Wat is de host file onder Windows en hoe kun je die aanpassen?
  • Waarom is het gevaarlijk als iemand zo maar jouw host file zou kunnen aanpassen?

Deze vragen en meer, worden in de onderstaande video beantwoord:

Virtual Host

In de meeste eenvoudige vorm staat elke web site op zijn eigen server. Voor de grote sites is dat ook zo. Het is voor grote sites zelfs zo dat er vaak meerdere servers worden gebruikt voor één site. Facebook draait op 30 000 servers (schatting 2019). Hoeveel servers er aan een web site hangen hangt dus af van de hoeveelheid gebruikers.

Als je weinig gebruikers hebt dan kun je ook eenvoudig meerdere web sites op één server draaien. Om dat te kunnen doen moeten we zogenaamde Virtuele hosts opzetten.

In dit plaatje zie je drie sites die allemaal op éém server draaien. Hoe doen we dat?

Allereerst moeten we ervoor zorgen dat alle drie de (domein)namen naar dezelfde server verwijzen. Laten we ervan uitgaan dat de server één IP adres heeft. Dat betekent dat we de drie servers alle drie aan hetzelfde IP-adres koppelen.

Dat kan via DNS, maar als we moeten testen als developer is het goedkoper en sneller om deze drie domeinnamen via onze host file allemaal naar hetzelfde ip-adres te laten verwijzen.

De server krijgt nu het verzoek om een pagina te tonen, maar hoe weet de server nu welke pagina hij moet tonen? Dat hangt af van de domeinnaam die wordt gebruikt. als je www.dreamer.com intypt dan moet de webserver een ander pagina laten zien dan wanneer je www.broken.com intypt.

 

 De server ziet dus welk domein er wordt gevraagd en afhankelijk van dat domein worden de files in een andere document root op de harddisk van de webserver gebruikt. Weet je nog de document root is de plaats waar de web pagina's (html files, php files e.d.) op de server staan?

Elk domein heeft dus zijn eigen document root. Deze worden geconfigureerd in Apache configuratie files. Onder Ubuntu staan deze files in /etc/apache2/sites-availble/

Je kunt 'oneindig' veel virtual hosts files aanmaken. In een virtual host file kun je heel veel zeken configureren. De hoofdzaak is om een mapping (=verbinding) te maken tussen de domeinnaam en de document root.

In zijn meest eenvoudige vorm ziet de virtual host config file er als volgt uit:

ServerName      ubuntu.local
DocumentRoot    /var/www/ubuntu.local

In dit voorbeeld is er dus een mapping gemaakt tussen ubuntu.local en de document root /var/www/unbuntu.local De Apache server gaat dus kijken wat het gevraagde domein is. Is dit ubuntu.local dan zal de webserver de files die in /var/www/ubuntu.local/ staan gebruiken om de website te laten zien.