Oppsett av Nginx og serverblokk
Vi viser hvordan du installerer Nginx på Ubuntu, setter opp en serverblokk for domenet ditt, konfigurerer reverse proxy for en Node.js-applikasjon og løser vanlige feil.

For en Nginx-installasjon kjører du kommandoene sudo apt update og sudo apt install nginx og tillater profilen Nginx Full i brannmuren. Deretter lager du en serverblokk for domenet ditt under /etc/nginx/sites-available, kobler den til mappen sites-enabled, tester med sudo nginx -t og aktiverer innstillingen med sudo systemctl reload nginx.
Hva er Nginx, og hva brukes det til?
Nginx er en åpen kildekode-webserver og reverse proxy som kan håndtere mange samtidige tilkoblinger med lite minne. Den leverer statiske filer svært raskt; den står foran Node.js-, Python- eller PHP-applikasjoner og videresender forespørsler til dem, avslutter SSL og fungerer som bufringslag.
Hovedforskjellen fra Apache er hvordan den konfigureres: Nginx har ikke .htaccess-filer per mappe, og alle regler ligger i den sentrale konfigurasjonen. Det øker ytelsen, men betyr at de som kommer fra Apache, må skrive reglene sine om. Vil du vite hva som tilsvarer dem på Apache-siden, kan du se artikkelen vår om htaccess-omdirigering.
Denne guiden tar utgangspunkt i Ubuntu og Debian; oppsett av utviklingsmiljø for macOS og Windows finner du under en egen overskrift.
Forutsetninger
Hvis Apache også er installert på serveren, prøver de to tjenestene å lytte på samme port 80, og Nginx starter ikke. Stopp og deaktiver Apache, eller få den til å lytte på en annen port.
- En server med Ubuntu eller Debian og en bruker med sudo-rettigheter
- At A-posten for domenet ditt peker på serverens IP
- At ingen annen tjeneste (f.eks. Apache) bruker portene 80 og 443
- Hvis du skal sette opp reverse proxy, en applikasjon som kjører på serveren (f.eks. Node.js på port 3000)
Trinn for Nginx-installasjon på Ubuntu
Nginx-pakken i Ubuntus eget pakkearkiv får jevnlig sikkerhetsoppdateringer og holder for de fleste prosjekter. Trenger du en nyere hovedlinjeversjon, kan du legge til det offisielle pakkearkivet på nginx.org.
sudo apt update
sudo apt install nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx
# Brannmur (hvis du bruker UFW)
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
# Verifisering
nginx -v
curl -I http://localhostViktige filer og mapper
- /etc/nginx/nginx.conf: hovedkonfigurasjonsfilen
- /etc/nginx/sites-available/: definerte serverblokker
- /etc/nginx/sites-enabled/: lenker til aktive blokker
- /var/www/: vanlig rotmappe for nettstedsfiler
- /var/log/nginx/access.log og error.log: logger for forespørsler og feil
Hvordan oppretter du en serverblokk?
En serverblokk (server block) tilsvarer virtuell vert i Apache og lar deg drifte flere domener på én server. Å lage en egen fil for hvert nettsted gjør administrasjonen enklere.
Lag først nettstedsmappen og sett eierskapet, og skriv deretter konfigurasjonsfilen. Legg både det rene domenet og www-versjonen til i linjen server_name; verktøy som Certbot leser denne linjen for å hente sertifikat.
sudo mkdir -p /var/www/ornek.com/html
sudo chown -R $USER:$USER /var/www/ornek.com/html
echo '<h1>ornek.com fungerer</h1>' > /var/www/ornek.com/html/index.html
sudo nano /etc/nginx/sites-available/ornek.comserver {
listen 80;
listen [::]:80;
server_name ornek.com www.ornek.com;
root /var/www/ornek.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/ornek.com.access.log;
error_log /var/log/nginx/ornek.com.error.log;
}sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
# Hvis du vil deaktivere standard velkomstside
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginxOppsett av Nginx reverse proxy
I stedet for å eksponere Node.js, Python eller en annen applikasjonsserver direkte mot internett, er det vanlig og trygt å sette Nginx foran. Nginx lytter på portene 80 og 443 og videresender forespørslene til applikasjonen som kjører lokalt; applikasjonens egen port forblir stengt utad.
I eksempelet under kjører applikasjonen på port 3000. For å videresende den ekte klient-IP-en og protokollen til applikasjonen legges det til proxy-headere; for applikasjoner som bruker WebSocket trengs også Upgrade-headere.
Hvis du kjører flere applikasjoner på samme server, er det mest ryddig å gi hver av dem et eget underdomene og en egen serverblokk. Administrasjonspanelet kan for eksempel publiseres på panel.ornek.com og API-et på api.ornek.com; når hver blokk har sin egen loggfil, er det også enklere å finne ut hvilken applikasjon et problem kommer fra. For at applikasjonen skal kunne lese den ekte klient-IP-en, husk også å slå på innstillingen for pålitelig proxy (trust proxy) i rammeverket du bruker.
server {
listen 80;
server_name app.ornek.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
client_max_body_size 20m;
}HTTPS, komprimering og bufring
Når serverblokken fungerer, er neste steg å gå over til HTTPS med et gratis sertifikat. Certbots Nginx-utvidelse henter sertifikatet og legger til 443-blokken og omdirigeringen for deg; trinnene har vi forklart i guiden for installasjon av SSL-sertifikat.
På hastighetssiden gjør gzip-komprimering og bufringshoder med lang levetid for statiske filer stor forskjell. Å legge domenet bak et CDN som Cloudflare leverer også statisk innhold fra punkter nær den besøkende; oppsettet finner du i artikkelen vår om Cloudflare-installasjon.
- Bruker du versjonsfingeravtrykk i filnavn (f.eks. app.3f9a.css), kan du forlenge bufringstiden enda mer.
- Ikke bufre HTML-filer lenge; ellers når oppdateringene de besøkende sent.
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;
location ~* \.(css|js|webp|avif|png|jpg|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public";
}Grunnleggende sikkerhetsinnstillinger
Standardinstallasjonen fungerer, men noen enkle innstillinger før lansering reduserer angrepsflaten tydelig. Ingen av dem krever tilleggsprogramvare; det holder å legge noen linjer til i konfigurasjonen.
Det første er å slå av server_tokens, slik at Nginx-versjonsnummeret ikke vises på feilsider og i headere. Legg deretter til en standardblokk som tar imot forespørsler med udefinerte domenenavn. Denne blokken hindrer roboter som kommer direkte til serverens IP-adresse, i å se det første nettstedet ditt.
Det er også viktig å stenge tilgangen til skjulte filer. En .git-mappe eller .env-fil som ved en feil ligger igjen i rotmappen, kan gjøre kildekoden eller databasepassordene dine tilgjengelige for alle. Slike lekkasjer skyldes som regel ikke ond vilje, men en hastig opplasting.
Til slutt bør du oppdatere serverpakkene jevnlig og bare holde åpne de portene du virkelig trenger. Når du lanserer et webdesign-prosjekt eller en nettbutikkplattform, reduserer det overraskelser i etterkant i stor grad å gå gjennom denne sjekklisten hver gang.
# /etc/nginx/nginx.conf, inne i http-blokken
server_tokens off;
# Standardblokk som avviser udefinerte domenenavn
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 444;
}
# Inne i server-blokken: steng skjulte filer
location ~ /\.(?!well-known) {
deny all;
}Utviklingsmiljø på macOS og Windows
Selv om produksjonsserveren som regel er Linux, gjør det jobben raskere å prøve konfigurasjonen lokalt. Nginx installert med Homebrew på macOS lytter som standard på port 8080, og konfigurasjonsfilen ligger i mappen etc/nginx under Homebrew-prefikset.
For Windows finnes det en build på nginx.org, men den offisielle dokumentasjonen sier at denne versjonen har begrensninger. Det mest praktiske på Windows er å kjøre Linux-versjonen i Docker eller WSL; da tester du i samme miljø som produksjonsserveren.
macOS (Homebrew)
brew install nginx
brew services start nginx
nginx -t
# Konfigurasjonsmappe
ls $(brew --prefix)/etc/nginx
curl -I http://localhost:8080Windows (Docker)
docker run -d --name web -p 8080:80 nginx
curl.exe -I http://localhost:8080Vanlige feil og løsninger
Det første steget ved feilsøking er alltid å sjekke syntaksen med sudo nginx -t og deretter filen error.log. De fleste problemer løses av den ene meldingslinjen der.
| Symptom | Mulig årsak og løsning |
|---|---|
| 502 Bad Gateway | Applikasjonen bak kjører ikke, eller porten er feil; sjekk applikasjonen og proxy_pass-adressen. |
| 403 Forbidden | Mappetillatelsene er utilstrekkelige, eller indeksfilen mangler; sjekk eierskapet og index-linjen. |
| Address already in use | En annen tjeneste bruker port 80; finn den med ss -tlnp og stopp den. |
| conflicting server name | Det samme server_name er definert i to blokker; fjern duplikatet. |
| 413 Request Entity Too Large | Den opplastede filen overskrider grensen; øk verdien av client_max_body_size. |
sudo nginx -t
sudo tail -n 50 /var/log/nginx/error.log
sudo ss -tlnp | grep -E ':80|:443'Vanlige spørsmål
01Er Nginx eller Apache best?
Begge er modne og pålitelige servere. Nginx utmerker seg ved høy samtidig trafikk og bruk som reverse proxy, mens Apache gir fleksibilitet på delt hosting takket være støtten for .htaccess. Mange infrastrukturer bruker også begge sammen.
02Hva er forskjellen på restart og reload?
reload laster inn den nye konfigurasjonen uten å bryte pågående tilkoblinger; foretrekk det ved daglige endringer. restart stopper tjenesten helt og starter den på nytt, og kan gi et kort avbrudd.
03Hvor mange nettsteder kan jeg drifte på én server?
Det er ikke Nginx, men serverens ressurser som setter grensen. Ved å opprette en egen serverblokk for hvert domene kan du kjøre mange nettsteder på samme maskin; når trafikken øker, må du følge med på minne-, prosessor- og diskbruk.
04Kan man gjøre lastbalansering med Nginx?
Ja. Når du definerer flere applikasjonsservere i en upstream-blokk og videresender til denne gruppen med proxy_pass, fordeler Nginx forespørslene mellom serverne. Standardmetoden er fordeling i tur og orden; med metoder som least_conn eller ip_hash kan du endre oppførselen.
En riktig installert Nginx gir et raskt og trygt grunnlag som kan bære flere applikasjoner. Vil du behandle serverinnstillinger, bufring og målene for Core Web Vitals samlet, kan du se tjenesten vår hastighet og ytelse. For et skreddersydd system som kjører på din egen server, eller ferdige Aurora-løsninger som hotellprogramvare, kan du nå oss på kontaktsiden.


