Spring til indhold

Netværksserver

en maskine eller et program, der betjener andre via netværk

Hvad det er

En netværksserver er et program, der venter på, at andre programmer når frem til det over et netværk, og derefter svarer på det, de spørger om. I daglig tale forkortes ordet til server, og det bruges både om programmet og om den computer, det kører på. Programmet i den anden ende af hver udveksling er klienten: en browser, en app på telefonen, et script, et mailprogram eller en anden server, der selv har et spørgsmål.

Standarderne bag nettet sætter rollen først. RFC 9110, som definerer HTTP, kalder en HTTP-server et program, der tager imod forbindelser for at betjene forespørgsler ved at sende svar, og tilføjer, at ordene klient og server kun henviser til de roller, programmer udfylder for en bestemt forbindelse. Det samme program kan betjene på én forbindelse og spørge på den næste. En webserver, der sender en forespørgsel videre til en applikation bag sig, er den applikations klient på andet stræk.

Under de fleste servere ligger ét greb, som TCP kalder en passiv åbning. Programmet fortæller styresystemet, at det vil tage imod indgående forbindelser, enten på én lokal adresse eller på dem alle, og så venter det. En klient foretager den aktive åbning mod den adresse og port. Så længe ingen er forbundet, laver en server næsten intet, man kan se.

Servere er forskellige i, hvordan de venter. Mange kører i måneder ad gangen og holder på deres hukommelse, hvad enten nogen kigger forbi eller ej. Andre startes forfra for hver forbindelse: et overordnet program står for ventetiden, starter en kopi af serveren for hver besøgende, og kopien afslutter, når den besøgende går.

Så er der maskinen. NIST’s ordliste beskriver en server som en computer eller enhed på et netværk, der administrerer netværksressourcer, og nævner filservere, printservere, netværksservere og databaseservere som eksempler. Når en virksomhed siger, at dens site kører på én lille server, mener den en computer, der er sat af til at køre serverprogrammer, i dag som regel en virtuel maskine lejet hos en udbyder. Denne ordliste holder en fast grænse mellem de to ord. En server er det, der svarer. Maskinen, som en ting med et navn og en adresse, der bygges, sikres og tælles, er en vært. Én vært kan køre mange servere, og en server kan flytte til en anden vært, så længe dens navn flytter med.

De slags, de fleste møder, er opkaldt efter det, de serverer: webservere til HTTP, mailservere til SMTP og IMAP, DNS-servere til navne, databaseservere til forespørgsler, filservere, git-servere og spilservere. En applikationsserver sidder som regel bag en webserver og kører produktets egen kode.

Hvorfor det betyder noget

Alt, hvad en besøgende når på internettet, besvares af en server, så at vælge servere er at vælge, hvad der står åbent udadtil, hvad det koster, og hvad der går ned sammen.

Når ordet første gang dukker op i en budgetsamtale, er det første at spørge, hvilken betydning der er på bordet. »Vi skal have en server« kan betyde et program, der skal installeres, en maskine, der skal lejes, en administreret tjeneste, som en anden driver, eller mere kapacitet på en maskine, der allerede er betalt. De adskiller sig i pris, i hvem der installerer sikkerhedsopdateringerne, og i hvem der bliver vækket om natten, når en af dem står stille.

Det andet er prisen, og det meste af en servers pris er dens venten. Et program, der holder på hukommelse, mens det står stille, holder på den døgnet rundt, så på en lille maskine er hver fastboende server en linje i budgettet. En server, der startes pr. forbindelse, bytter lidt tid ved hvert besøg for at holde på ingenting ind imellem.

Det tredje er eksponering. Hver lyttende server tager imod input fra fremmede, og det gør den til noget, der skal holdes opdateret, konfigureres med vilje og holdes øje med. At køre så få servere, som opgaven kræver, er lige så meget en sikkerhedsbeslutning som en besparelse.

Det fjerde er, at rollen kan købes i stedet for at drives. En administreret database, en hostet postkasse eller et content delivery network er en server, som en anden virksomhed driver. Byttet er kontrol og indsigt mod færre ting at opdatere, og en lille virksomhed kan med god grund drive sin egen webserver og leje sin mail.

Sådan ser det ud i praksis

Alle dette sites servere kan være på én maskine, og kreditsiden nævner hvert serverprogram på den. Caddy besvarer hver webforespørgsel og fornyer selv HTTPS-certifikatet. Agate og Gophernicus besvarer Gemini og Gopher, Tor besvarer onion-adressen, og Soft Serve er git-serveren. Caddy, Agate, Gophernicus og Tor henter alle deres filer fra én fælles mappe, så en udrulning skriver ét sted og opdaterer alle fire offentlige kopier af sitet på én gang. Onion-tjenesten viser, at det at betjene og det at lytte er to forskellige ting: siden kalder den den eneste indgang, der kunne tilføjes uden at åbne en port, fordi tor selv ringer ud til introduktionspunkter, og maskinens åbne porte forblev præcis, som de var. Mailen, siger samme side, kører hos en hostet tjeneste, og dér er rollen købt i stedet for drevet.

Privatlivssiden viser den slags, der startes pr. forbindelse, fra en vinkel, få kigger fra. Gopher-kopien startes forfra for hver besøgende af styresystemet, som navngiver det øjeblik efter den adresse, den besøgende kom fra, og skriver navnet i sin egen log, en som serverprogrammet aldrig ser. Sitet opdagede den log den dag, det første gang talte forespørgsler, og nu udløber den efter tredive dage.

Og én maskine sætter en grænse for, hvilke servere den kan tage. Beretningen om at køre hele virksomheden på én vært med 512 MB holder bevidst mailen væk fra den maskine. Mailserveren findes som et installationsstillads, der venter på sin egen vært, fordi en mailserver kræver råderum, som maskinen allerede har brugt: en grænse, der er skrevet ned i stedet for at blive opdaget senere.

Hvor det går galt

Maskinen svarer, og serveren gør ikke. Et ping, en åben SSH-session eller en grøn flise for den virtuelle maskine siger alle, at værten er oppe. Ingen af dem siger, at webserveren svarer, at den returnerer den rigtige side, eller at dens certifikat stadig er gyldigt. Tjek en server, som en klient bruger den, ved at stille et rigtigt spørgsmål og læse svaret:

curl -sS -o /dev/null -w '%{http_code} %{time_total}s\n' https://example.com/

Et 200 på en fornuftig tid er, hvad en besøgende har brug for. Alt andet er en fejl, hvad maskinens grafer end viser.

Filen på disken siger én ting og den kørende server en anden. De fleste servere læser deres konfiguration, når de starter eller genindlæser, og holder den i hukommelsen, så en redigeret fil ændrer intet før næste genindlæsning. En genstart med en ødelagt fil efterlader slet ingen kørende server. Validér filen, giv den så til den kørende server, og stil derefter serveren et spørgsmål. Caddys kommandolinje dækker de to første trin: validate indlæser og klargør hvert modul, som om konfigurationen skulle startes, uden at starte den, og reload giver den kørende instans den nye.

caddy validate --config /etc/caddy/Caddyfile
caddy reload --config /etc/caddy/Caddyfile

To servere halverer ikke arbejdet for én. En ekstra kopi af en applikationsserver bag en load balancer sætter spørgsmålstegn ved hver eneste tilstand, den første holdt på. Sessioner i hukommelsen tilhører én kopi, så en besøgende, der sendes til den anden, bliver logget ud. En fil, der er uploadet til én disk, ligger kun på den disk. Et planlagt job, der er installeret på begge, kører to gange. Flyt sessioner, uploads og planlagte job et sted hen, som begge kopier deler, før den anden tilføjes, eller behold én server og gør den hurtigere.

Alle servere på én maskine deler skæbne. Én vært med mange servere er billig og enkel, og det betyder også, at én genstart, én fuld disk eller én opbrugt hukommelse tager alle servere ned på én gang. For et lille site er det en rimelig handel, når den er valgt med vilje: maskinen er beskrevet som kode, så den kan bygges igen, data sikkerhedskopieres væk fra maskinen, og en server, der kræver sit eget råderum, får sin egen maskine.

Læs mere

Ordliste