# Server

## Vad det är

En server är ett program som väntar på att andra program ska nå det över ett
nätverk och sedan besvarar det de ber om. I vardagligt tal betecknar ordet både
programmet och den dator det körs på, och i plural blir det servrar. Programmet
i andra änden av varje utbyte är klienten: en webbläsare, en app i telefonen,
ett skript, ett e-postprogram eller en annan server som ställer en egen fråga.

Standarderna bakom webben sätter rollen först. RFC 9110, som definierar HTTP,
kallar en HTTP-server ett program som tar emot anslutningar för att betjäna
förfrågningar genom att skicka svar, och tillägger att orden klient och server
bara syftar på de roller som program spelar för en viss anslutning. Samma
program kan svara på en anslutning och fråga på nästa. En webbserver som skickar
en förfrågan vidare till en applikation bakom sig är den applikationens klient
för det andra steget.

Under de flesta servrar finns ett och samma grepp, som TCP kallar en passiv
öppning. Programmet talar om för operativsystemet att det vill ta emot
inkommande anslutningar, antingen på en enda lokal adress eller på vilken som
helst av dem, och sedan väntar det. En klient gör den aktiva öppningen mot den
adressen och porten. Så länge ingen är ansluten gör en server nästan ingenting
synligt.

Servrar skiljer sig åt i hur de väntar. Många körs i månader i sträck och håller
kvar sitt minne vare sig någon besöker dem eller inte. Andra startas på nytt för
varje anslutning: ett övervakande program sköter väntandet och startar en kopia
av servern för varje besökare, och kopian avslutas när besökaren går.

Sedan finns maskinen. Ordlistan från NIST beskriver en server som en dator eller
enhet i ett nätverk som förvaltar nätverksresurser, och nämner filservrar,
skrivarservrar, nätverksservrar och databasservrar som exempel. När ett företag
säger att webbplatsen körs på en liten server menar det en dator som är avsatt
för att köra serverprogram, i dag oftast en virtuell maskin som hyrs av en
leverantör. Den här ordlistan håller en tydlig gräns mellan de två orden. En
server är det som svarar. Maskinen, som en sak med ett namn och en adress, som
byggs, säkras och räknas, är en värddator. En värddator kan köra många servrar,
och en server kan flytta till en annan värddator så länge dess namn flyttar med.

De sorter som de flesta möter har fått namn efter vad de levererar: webbservrar
för HTTP, e-postservrar för SMTP och IMAP, DNS-servrar för namn, databasservrar
för databasfrågor, filservrar, git-servrar och spelservrar. En
applikationsserver sitter oftast bakom en webbserver och kör produktens egen
kod.

## Varför det spelar roll

Allt som en besökare når på internet besvaras av någon server, så att välja
servrar är att välja vad som exponeras, vad det kostar och vad som går ned
samtidigt.

Det första skälet att använda ordet varsamt i ett samtal om budget är att det
måste framgå vilken betydelse som avses. ”Vi behöver en server” kan betyda ett
program att installera, en maskin att hyra, en förvaltad tjänst som någon annan
driver eller mer kapacitet på en maskin som redan är betald. De skiljer sig åt i
pris, i vem som installerar säkerhetsuppdateringarna och i vem som blir väckt
mitt i natten när en av dem stannar.

Det andra är kostnaden, och det mesta av en servers kostnad ligger i väntandet.
Ett program som håller minne medan det står sysslolöst håller det dygnet runt,
så på en liten maskin är varje server som ligger kvar i minnet en rad i
budgeten. En server som startas per anslutning byter lite tid vid varje besök
mot att ingenting hålls kvar däremellan.

Det tredje är exponeringen. Varje lyssnande server tar emot indata från
främlingar, och därför är den något som måste hållas uppdaterat, konfigureras
med avsikt och övervakas. Att köra så få servrar som jobbet kräver är lika
mycket ett säkerhetsbeslut som en besparing.

Det fjärde är att rollen kan köpas i stället för att drivas. En förvaltad
databas, en hostad brevlåda eller ett CDN är en server som ett annat företag
driver. Avvägningen är kontroll och insyn mot färre saker att uppdatera, och ett
litet företag kan med gott skäl driva sin egen webbserver och hyra sin e-post.

## Så ser det ut i praktiken

Alla den här webbplatsens servrar ryms på en maskin, och kolofonen
[namnger varje serverprogram på den](/sv/credits/). Caddy besvarar varje
webbförfrågan och förnyar HTTPS-certifikatet själv. Agate och Gophernicus
besvarar Gemini och Gopher, Tor besvarar onion-adressen och Soft Serve är
git-servern. De fyra program som visar webbplatsen utåt delar en enda mapp med
filer som källa, och därför räcker en driftsättning för att uppdatera dem alla.
Onion-tjänsten visar att det är skilda saker att betjäna och att lyssna: sidan
kallar den den enda ytterdörr som gick att lägga till utan att öppna en port,
eftersom tor kopplar upp sig utåt mot introduktionspunkter, och maskinens öppna
portar förblev exakt som de var. E-posten ligger enligt samma sida hos en hostad
tjänst, vilket är rollen köpt i stället för driven.

Integritetssidan visar den sort som startas per anslutning, från en vinkel som
få tittar på.
[Gopher-kopian startas på nytt för varje besökare av operativsystemet](/sv/privacy/),
som döper det ögonblicket efter den adress besökaren kom från och skriver in
namnet i en egen logg, en logg som serverprogramvaran aldrig ser. Webbplatsen
hittade loggen samma dag som den först räknade förfrågningar, och nu rensas den
efter trettio dagar.

En enda maskin sätter också en gräns för vilka servrar den kan ta emot.
Redogörelsen för hur
[hela företaget körs på en värddator med 512 MB](/sv/portfolio/ran-the-whole-company-on-one-512mb-host-109/)
håller med avsikt e-posten borta från den maskinen. E-postservern finns som ett
installationsskelett som väntar på en egen värddator, eftersom en e-postserver
behöver marginal som maskinen redan har förbrukat: en gräns som står nedskriven
i stället för att upptäckas senare.

## Var det går fel

**Maskinen svarar men servern gör det inte.** En ping, en öppen SSH-session
eller en grön ruta för den virtuella maskinen säger alla att värddatorn är uppe.
Ingen av dem säger att webbservern svarar, att den returnerar rätt sida eller
att dess certifikat fortfarande är giltigt. Kontrollera en server så som en
klient använder den, genom att ställa en verklig fråga och läsa svaret:

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

En 200 inom rimlig tid är vad en besökare behöver. Allt annat är ett fel, vad
maskinens grafer än säger.

**Filen på disken säger en sak och den körande servern en annan.** De flesta
servrar läser sin konfiguration när de startar eller laddas om och håller den
sedan i minnet, så en redigerad fil ändrar ingenting förrän nästa omladdning. En
omstart med en trasig fil lämnar ingen server igång alls. Validera filen, lämna
den sedan till den körande servern och ställ till sist en fråga till servern.
Kommandoraden i Caddy täcker de två första stegen: `validate` laddar och
förbereder varje modul som om konfigurationen skulle startas, utan att starta
den, och `reload` ger den körande instansen den nya.

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

**En andra server halverar inte arbetet för den första.** En andra kopia av en
applikationsserver bakom en lastbalanserare ifrågasätter varje bit tillstånd hos
den första. Sessioner som hålls i minnet tillhör en kopia, så en besökare som
skickas till den andra loggas ut. En fil som har laddats upp till den ena disken
finns inte på den andra. Ett schemalagt jobb som har installerats på båda körs
två gånger. Flytta sessioner, uppladdningar och schemalagda jobb till ett ställe
som båda kopiorna delar innan den andra läggs till, eller behåll en server och
gör den snabbare.

**Varje server på en maskin delar maskinens öde.** En värddator som bär många
servrar är billig och enkel, och den innebär också att en omstart, en full disk
eller ett uttömt minne tar ned varje server på en gång. För en liten webbplats
är det en rimlig avvägning när den görs med avsikt: maskinen beskrivs som kod så
att den kan byggas upp på nytt, datan säkerhetskopieras bort från maskinen, och
en server som behöver egen marginal får en egen maskin.

## Läs mer

- [server — NIST CSRC Glossary](https://csrc.nist.gov/glossary/term/server)
  — definitionen som publikationerna från NIST delar, med de sorters servrar som
  de nämner.
- [RFC 9110, HTTP Semantics: Connections, Clients, and Servers](https://www.rfc-editor.org/rfc/rfc9110.html#section-3.3)
  — klient och server definierade som roller som ett program spelar på en enda
  anslutning.
- [RFC 9293, Transmission Control Protocol](https://www.rfc-editor.org/rfc/rfc9293.html)
  — passiva och aktiva öppningar, och hur ett lyssnande program väntar på en
  adress eller på alla.
- [Caddy: Command Line](https://caddyserver.com/docs/command-line)
  — `validate`, `reload` och de andra kommandona i den webbserver som den här
  webbplatsen kör.

<https://engineer.company/sv/glossary/server/>
