Server
en maskin eller et program som betjener andre over nett
Hva det er
En server er et program som venter på at andre programmer skal kontakte det over et nettverk, og som svarer på det de spør om. Med det lange navnet heter det nettverksserver, men i daglig tale brukes bare server, både om programmet og om datamaskinen det kjører på. Programmet i den andre enden av hver utveksling er klienten: en nettleser, en app på mobilen, et skript, et e-postprogram eller en annen server som har et eget spørsmål.
Standardene bak nettet setter rollen først. RFC 9110, som definerer HTTP, beskriver en HTTP-server som et program som tar imot tilkoblinger for å betjene forespørsler med svar, og legger til at ordene klient og server bare viser til rollene programmene har i én bestemt tilkobling. Det samme programmet kan være server på én tilkobling og spørre på den neste. En webserver som sender en forespørsel videre til en applikasjon bak seg, er klienten til den applikasjonen på den andre etappen.
Under de fleste servere ligger ett grep, som TCP kaller en passiv åpning. Programmet sier fra til operativsystemet at det vil ta imot innkommende tilkoblinger, enten på én lokal adresse eller på alle, og så venter det. En klient gjør den aktive åpningen mot den adressen og nettverksporten. Mellom tilkoblingene gjør en server nesten ingenting man kan se.
Servere skiller seg i hvordan de venter. Mange kjører i månedsvis i strekk og holder på minnet sitt enten noen er innom eller ikke. Andre startes på nytt for hver tilkobling: et overordnet program tar seg av ventingen, starter en kopi av serveren for hver besøkende, og kopien avslutter når den besøkende går.
Så er det maskinen. Ordlisten til NIST beskriver en server som en datamaskin eller enhet i et nettverk som forvalter ressursene i nettverket, og nevner filservere, utskriftsservere, nettverksservere og databaseservere som eksempler. Når et selskap sier at nettstedet kjører på én liten server, mener det en datamaskin satt av til å kjøre serverprogrammer, i dag som regel en virtuell maskin leid fra en leverandør. Denne ordlisten holder de to ordene strengt fra hverandre. En server er det som svarer. Maskinen, som en ting med navn og adresse som bygges, sikres og telles, er en vert. Én vert kan kjøre mange servere, og en server kan flytte til en annen vert, så lenge navnet flytter med.
De typene folk flest møter, har navn etter det de leverer: webservere for HTTP, e-postservere for SMTP og IMAP, DNS-servere for navn, databaseservere for spørringer, filservere, git-servere og spillservere. En applikasjonsserver står som regel bak en webserver og kjører produktets egen kode.
Hvorfor det er viktig
Alt en besøkende når på internett, besvares av en eller annen server. Å velge servere er derfor å velge hva som er eksponert, hva det koster og hva som svikter samtidig.
Det første ordet brukes til i en budsjettsamtale, er å spørre hvilken betydning som ligger på bordet. «Vi trenger en server» kan bety et program som skal installeres, en maskin som skal leies, en administrert tjeneste som noen andre drifter, eller mer kapasitet på en maskin det allerede er betalt for. De alternativene er forskjellige i pris, i hvem som legger inn sikkerhetsoppdateringene, og i hvem som blir vekket om natten når en av dem stopper.
Det andre er kostnaden, og det meste av kostnaden ved en server er ventingen. Et program som holder på minne mens det står ledig, holder på det hele døgnet, så på en liten maskin er hver server som ligger i minnet, en egen linje i budsjettet. En server som startes per tilkobling, bytter litt tid ved hvert besøk mot at ingenting holdes av mellom besøkene.
Det tredje er eksponering. Hver server som lytter, tar imot data fra fremmede, og det gjør den til noe som må holdes oppdatert, konfigureres med vilje og følges med på. Å kjøre så få servere som jobben krever, er en sikkerhetsbeslutning like mye som en innsparing.
Det fjerde er at rollen kan kjøpes i stedet for å driftes. En administrert database, en hostet postkasse eller et CDN er en server som et annet selskap drifter. Byttet er styring og innsyn mot færre ting å oppdatere, og et lite selskap kan med god grunn drifte sin egen webserver og samtidig leie e-posten.
Slik ser det ut i praksis
Alle serverne til dette nettstedet får plass på én maskin, og kolofonen navngir hvert serverprogram på den. Caddy svarer på hver webforespørsel og fornyer HTTPS-sertifikatet selv. Agate og Gophernicus svarer på Gemini og Gopher, Tor svarer på onion-adressen, og Soft Serve er git-serveren. Alle de fire offentlige kopiene av nettstedet leser den samme mappen med filer, så én produksjonssetting oppdaterer alle fire. Onion-tjenesten viser at det å betjene og det å lytte er to forskjellige ting: siden kaller den den eneste inngangsdøren som kunne legges til uten å åpne en port, fordi tor kobler seg ut til introduksjonspunkter, og maskinens åpne porter forble nøyaktig som de var. E-posten, sier den samme siden, går via en hostet tjeneste, og det er rollen kjøpt i stedet for driftet.
Personvernsiden viser typen som startes per tilkobling, fra en vinkel få ser på. Gopher-kopien startes på nytt for hver besøkende av operativsystemet, som gir det øyeblikket navn etter adressen den besøkende kom fra, og skriver navnet inn i en egen logg som serverprogramvaren aldri ser. Nettstedet fant den loggen den dagen det telte forespørsler for første gang, og nå utløper den etter tretti dager.
Og én maskin setter en grense for hvilke servere den kan ta. Beretningen om å drive hele selskapet på én vert med 512 MB holder med vilje e-posten unna den maskinen. E-postserveren finnes som et installasjonsstillas som venter på en egen vert, fordi en e-postserver trenger margin som maskinen allerede har brukt opp: en grense skrevet ned i stedet for oppdaget senere.
Hvor det går galt
En maskin som svarer, og en server som tier. En ping, en åpen SSH-økt eller en grønn flis for den virtuelle maskinen sier alle at verten er oppe. Hva webserveren gjør, sier de derimot ingenting om: om den svarer, om den gir den riktige siden, eller om sertifikatet fortsatt er gyldig. Sjekk en server slik en klient bruker den, ved å stille et ekte spørsmål og lese svaret:
curl -sS -o /dev/null -w '%{http_code} %{time_total}s\n' https://example.com/
En 200 innen rimelig tid er det en besøkende trenger. Alt annet er en feil, uansett hva grafene for maskinen sier.
En fil på disken som sier én ting, og en kjørende server som sier en annen.
De fleste servere leser konfigurasjonen når de starter eller lastes inn på nytt,
og holder den i minnet, så en redigert fil endrer ingenting før neste
innlasting. En omstart med en ødelagt fil etterlater en server som står helt
stille. Valider filen, gi den så til den kjørende serveren, og still deretter
serveren et spørsmål. Kommandolinjen til Caddy dekker de to første stegene:
validate laster og klargjør hver modul som om konfigurasjonen skulle startes,
uten å starte den, og reload gir den kjørende instansen den nye.
caddy validate --config /etc/caddy/Caddyfile
caddy reload --config /etc/caddy/Caddyfile
En andre kopi av serveren, og tilstanden som ble igjen på den første. En ny kopi av en applikasjonsserver bak en lastbalanserer setter spørsmålstegn ved hver bit tilstand på den første. Økter som holdes i minnet, tilhører én kopi, så en besøkende som sendes til den andre, blir logget ut. En fil lastet opp til den ene disken mangler på den andre. En planlagt jobb installert på begge kjører to ganger. Flytt økter, opplastinger og planlagte jobber til et sted begge kopiene deler, før den andre legges til, eller behold én server og gjør den raskere.
Mange servere på én maskin, med én felles skjebne. Én vert med mange servere er billig og enkelt, og det betyr også at én omstart, én full disk eller ett oppbrukt minne tar ned alle serverne samtidig. For et lite nettsted er det et rimelig bytte når det er valgt med vilje: maskinen er beskrevet som kode, så den kan bygges opp på nytt, dataene har en sikkerhetskopi utenfor maskinen, og en server som trenger egen margin, får en egen maskin.
Les mer
- server — NIST CSRC Glossary — definisjonen som publikasjonene til NIST deler, med typene server de nevner.
- RFC 9110, HTTP Semantics: Connections, Clients, and Servers — klient og server definert som roller et program har i én tilkobling.
- RFC 9293, Transmission Control Protocol — passiv og aktiv åpning, og hvordan et program som lytter, venter på én adresse eller på alle.
- Caddy: Command Line
—
validate,reloadog de andre kommandoene til webserveren dette nettstedet kjører.