4.3 DNS en Virtual Hosts - Theorie
In deze les bespreken we wat DNS is. Wat een host file is en waarom we dat nodig hebben bij het opzetten van een virtual host op Apache. In de vorige les heb je twee virtuele hosts opgezet en in deze les kijken we nog ene keer terug wat we nu precies hebben gedaan.
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.
Trouble shoot DNS
Om te controleren of je DNS of host file werkt hoef je niet een hele website op te zetten.
Onder Linux en Windows heb je de volgende handige commando's:
nslookup
nslookup vps789715.ovh.net
Met nslookup kijk je of jouw systeem een de naam kan omzetten naar een ip-nummer. Of dat dan via DNS of de host file loopt, weet je niet. Om dat te bepalen zou je de host file tijdelijk even leeg kunnen maken en dan controleren of nog steeds hetzelfde ip-nummer wordt gevonden bij de naam.
ping
ping 84.116.46.23
Met ping 'kloppen' we aan bij de server. Als de server 'leeft' dan antwoord die op een ping. Het antwoord kun je terug zien op je console.
Zie je dit:
64 bytes from 84.116.46.23: icmp_seq=9 ttl=57 time=6.889 ms
dan zie je dat de server op ip-adres 84.116.46.23 binnen 6.9 millie seconden (0.006 seconden ) een antwoord heeft verstuurd. Je weet nu dat de server bestaat en 'aan' staat.
Zie je dit:
Request timeout for icmp_seq 0
dan reageert de server niet en zou het kunnen dat de server niet bestaat of uit staat.
Let op dat om beveiligingsredenen een server soms niet reageert op een ping.
Ping Tijden
Ping-tijden en afstanden hebben een relatie. De snelste ping time van Amsterdam naar London (±340 km) is ongeveer 15 ms (0.014 seconden). Amsterdam Sydney, Australië is ongeveer 280 ms. Ping-tijden zijnook afhankelijk van de snelheid van de server, de drukte op het netwerk, de snelheid van jouw lokale netwerk (WiFi), de kwaliteit van jouw verbinding (WiFi), etc. etc.