Bilde av Michael Dziedzic fra Unsplash
DNS, TCP/IP og HTTP
Kort repetisjon
For at den fysiske webserveren din skal kunne serve mange websider må den ha flere virtuelle host's.
Når en webclient sender en request til en webserver spør den aller først den nærmeste DNS serveren om å få IP adressen til websiden den ønsker å lese innhold fra. DNS serveren svarer med IP-adressen. Nå kan webclienten lage en HTTP request til denne IP-adressen.
HTTP requesten må som ett minimum inneholde
- Hvilken type request den kommer med.
- Hva requesten er
- Hvilken versjon av HTTP som benyttes
- Host, som litt forenklet kan sammenlignes med en person som bor i ett hus
GET /index.html HTTP/1.1
Host: www.home.local
For HTTP request bruker man normalt TCP som transport metode. Derfor liker jeg å se for meg følgende
- Man velger transportør (TCP) - på samme måte som posten i norge
- Man lager ett brev som skal sendes. Utenpå brevet skriver man IP adressen brevet skal ende opp hos, og port den skal inn i. I tillegg skriver man avsenders IP-adresse og port.
- Inni brevet putter man et ark som er selve HTTP requesten.
Når brevet kommer frem til riktig IP-adresse og port, blir brevet åpnet av programmet (serveren) som lytter på denne porten. Hvis det er riktig protokoll (HTTP) leser den brevet og finner ut hvilken host som skal ha requesten. Denne hosten ser på hvilken request det er, og hva som blir requestet. Brevet merkes med IP-adresse og port nummer det skal sendes tilbake til og avsender (server) IP-adresse og port. Inni brevet legger hosten ett ark med en HTTP response som inneholder det webclienten ba om i sin request. Når arket er puttet inni brevet sendes den med rett transportør (TCP) tilbake til webclienten.
200 OK
Oppsett av virtal host
I webbens steinalder var det slik at en webserver kunne kun "hoste" en webside. Så for at det skulle være mulig å ha flere websider måtte man ha flere fysiske servere. Apache var en av de første som gjorde det mulig å hoste flere websider på samme fysiske server. Hver av disse websidene har hver sin virtal host.
Siden en webserver kan ha mange virtual host må man konfigurere hver av disse.
I Apache 2, i Ubuntu 20.04 og mange andre Debian baserte Linux distro'er ligger konfigurasjons filene i mappen
/etc/apache2/sites-available
Apache serveren har en standard eller default host, som blir brukt til å svare på alle requests til hosts den ikke finner i listen over host den har. Så hvis du ikke skal ha flere enn en host på webserveren trenger du ikke opprette flere virtuelle hosts, du kan bare endre på default host'en. I dette eksempelet skal vi opprett en host som heter blog.home.no. Dette er et domene jeg har registrert i DNS serveren på mitt hjemmenettverk, som peker til IP-adressen til denne webserveren.
Vi starter med navigere til mappen med konfigurasjons filer, og oppretter konfigurasjons filen for blog.home.no
cd /etc/apache2/sites-available
sudo vim www.home.local.conf
<VirtualHost *:80>
ServerAdmin admin@home.local
ServerName www.home.local
DocumentRoot /var/www/www.home.local/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/www.home.local>
Options All
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Når dette er gjort må mappen websiden skal ligge i opprettes, og riktige brukerrettigheter tildeles og riktige eiere av mappen må settes.
sudo mkdir /var/www/www.home.local
sudo chmod -R 775 /var/www/www.home.local
sudo chown <mitt-brukernavn>:www-data /var/www/www.home.local
For å gjøre det enklest mulig å jobbe med nettsiden, setter vi eiere til ditt brukernavn, og gruppe-eieren til apache/php sin bruker som heter www-data. Siden både min bruker og brukere i gruppen www-data har alle rettigheter (7=read, write, execute) går dette smertefritt.
I tillegg lager vi en enkel html fil som vi kan bruke til å teste hosten med.
vim /var/www/www.home.local/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Home</title>
</head>
<body>
<h1>www.home.local</h1>
<p>It's WORKING!!!</p>
</body>
</html>
Når dette er gjort er det klart til å aktivere hosten. Når det er gjort må Apache2 restares for at den nye hosten skal bli aktivert.
sudo a2ensite www.home.local.conf
sudo systemctl reload apache2
Hvis din DNS peker www.home.local til IP-adressen serveren din ligger på, skal siden nå kunne vises i din nettleser. Om du ikke har en DNS server kan du i Windows legge inn en linje i bunnen av filen "c:\Windows\System32\Drivers\etc\hosts", eller i Linux legge hosten som en linje i /etc/hosts
...
10.22.22.50 www.home.local
Når dette er gjort skal du kunne navigere til websiden med en nettleser.
Gratulerer, du har nå satt opp en webserver som hoster din egen webside!
Brannmur oppsett
For at andre datamaskiner på nettverket skal få tilgang til webserveren må brannmuren åpnes for trafikk til webserveren
sudo ufw allow http
Rule added
Rule added (v6)
Kontrollere at reglene ble lagt til.
sudo ufw status
Status: active
To Action From
-- ------ ----
80/tcp ALLOW Anywhere
80/tcp (v6) ALLOW Anywhere (v6)