Server
en dator eller ett program som betjänar andra i ett nätverk
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. 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, 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 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:
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.
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 — definitionen som publikationerna från NIST delar, med de sorters servrar som de nämner.
- RFC 9110, HTTP Semantics: Connections, Clients, and Servers — klient och server definierade som roller som ett program spelar på en enda anslutning.
- RFC 9293, Transmission Control Protocol — passiva och aktiva öppningar, och hur ett lyssnande program väntar på en adress eller på alla.
- Caddy: Command Line
—
validate,reloadoch de andra kommandona i den webbserver som den här webbplatsen kör.