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 een 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 verstuurd, worden IP adressen gebruikt.
Dit werkt hetzelfde als een telefoonnummer; om twee telefoons met elkaar te verbinden en iemand te kunnen bellen heb je zijn telefoonnummer nodig. Bij computers heb je in plaats van telefoonnummers, ip-adres nodig.
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 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-adres.
Ook dit werkt weer hetzelfde als bij een telefoon. In plaats van een telefoonnummer ga je naar het adresboek en zoek je een naam. Je klikt op de naam en je telefoon belt het nummer dat aan de naam is gekoppeld. Je telefoonboek is het DNS systeem van jouw telefoon.
Host file
Op Linux en Windows heb je een host file. Dit is een gewoon ene text bestandje dat ergens op jouw disk staat. 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 vop de lokale computer; dat is dus de computer waar de host file op staat.
Stel je wilt naar ubuntu.local. 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 op het internet gevraagd of er een nummer bekend is.
Voor het opzoeken van het jsuite IP-adres wordt eerst in de loklae host file gekeken en dan pas wordt DNS geraadpleegt.
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 regel is een mapping (=verbinding) 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, beide verwijzen naar 127.0.0.1.
- 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 website 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 sit:
Facebook draait op 30 000 servers (schatting 2019). Hoeveel servers er aan een website 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:
In dit plaatje zie je drie sites die allemaal op één 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. In het hoofdstuk hiervoor en in de film die daar bij hoort, wordt uitgelegd hoe dat werkt.
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/
Door het koppelen van een site (domeinnaam) aan een eigen document root lijkt het alsof elke website zijn eigen webserver heeft. Dit heet een virtual host.
Elke vitual host wordt in Apache met een eigen virtual host file geconfigureerd. Je kunt 'oneindig' veel virtual hosts aanmaken. In een virtual host file kun je heel veel zaken configureren maar 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 configuratie 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.
Troubleshoot DNS
Troubleshooten is er proberen achter te komen waarom iets niet werkt.
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 een paar 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.
--