Installera Nginx och ställ in serverblock
Vi går igenom hur du installerar Nginx på Ubuntu och skapar ett serverblock för din domän, ställer in reverse proxy för en Node.js-applikation och löser vanliga fel.

För Nginx-installationen kör du sudo apt update och sudo apt install nginx och tillåter profilen Nginx Full i brandväggen. Därefter skapar du ett serverblock för din domän under /etc/nginx/sites-available, länkar det till mappen sites-enabled, testar med sudo nginx -t och aktiverar inställningen med sudo systemctl reload nginx.
Vad är Nginx och vad används det till?
Nginx är en öppen källkod-webbserver och reverse proxy som klarar många samtidiga anslutningar med lite minne. Den levererar statiska filer mycket snabbt; den står framför Node.js-, Python- eller PHP-applikationer och vidarebefordrar förfrågningar till dem, avslutar SSL och fungerar som cachelager.
Den grundläggande skillnaden mot Apache är hur konfigurationen görs: i Nginx finns ingen .htaccess-fil per katalog, alla regler hålls i den centrala konfigurationen. Det ökar prestandan men innebär att den som flyttar från Apache måste skriva om sina regler. Vill du veta motsvarigheterna på Apache-sidan kan du läsa vår artikel om omdirigering med htaccess.
Den här guiden utgår från Ubuntu och Debian; installationen av utvecklingsmiljön för macOS och Windows hittar du under en egen rubrik.
Förutsättningar
Om Apache också är installerad på servern försöker de två tjänsterna lyssna på samma port 80 och Nginx startar inte. Stoppa och inaktivera Apache eller låt den lyssna på en annan port.
- En server med Ubuntu eller Debian och en användare med sudo-behörighet
- Att domänens A-post pekar på serverns IP
- Att ingen annan tjänst (t.ex. Apache) använder portarna 80 och 443
- Om du ska sätta upp reverse proxy, en applikation som körs på servern (t.ex. Node.js på port 3000)
Installationssteg för Nginx på Ubuntu
Nginx-paketet i Ubuntus eget arkiv får regelbundet säkerhetsuppdateringar och räcker för de flesta projekt. Behöver du en nyare mainline-version kan du lägga till det officiella paketarkivet på nginx.org.
sudo apt update
sudo apt install nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx
# Brandvägg (om du använder UFW)
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
# Verifiering
nginx -v
curl -I http://localhostViktiga filer och mappar
- /etc/nginx/nginx.conf: huvudkonfigurationsfilen
- /etc/nginx/sites-available/: definierade serverblock
- /etc/nginx/sites-enabled/: länkar till aktiverade block
- /var/www/: vanlig rotmapp för webbplatsfiler
- /var/log/nginx/access.log och error.log: förfrågnings- och felloggar
Hur skapar man ett serverblock?
Ett serverblock (server block) motsvarar en virtuell värd i Apache och gör att du kan hysa flera domäner på en och samma server. Att skapa en separat fil för varje sajt gör hanteringen enklare.
Skapa först sajtmappen och ställ in ägarskapet, och skriv sedan konfigurationsfilen. Lägg till både den nakna domänen och www-versionen på raden server_name; verktyg som Certbot läser den raden för att få certifikat.
sudo mkdir -p /var/www/ornek.com/html
sudo chown -R $USER:$USER /var/www/ornek.com/html
echo '<h1>ornek.com fungerar</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/
# Om du vill stänga av standardvälkomstsidan
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginxNginx reverse proxy-inställning
I stället för att exponera en Node.js-, Python- eller annan applikationsserver direkt mot internet är det vanligt och säkert att placera Nginx framför. Nginx lyssnar på portarna 80 och 443 och vidarebefordrar förfrågningarna till den lokalt körande applikationen; applikationens egen port förblir stängd utåt.
I exemplet nedan körs applikationen på port 3000. För att skicka vidare den riktiga klientens IP och protokollet till applikationen läggs proxyhuvuden till; för applikationer som använder WebSocket behövs även Upgrade-huvuden.
Kör du flera applikationer på samma server är det mest ordnade att ge varje en egen underdomän och ett eget serverblock. Till exempel kan adminpanelen publiceras på panel.ornek.com och API:et på api.ornek.com; när varje block har sin egen loggfil är det också enklare att hitta vilken applikation ett problem kommer från. För att applikationen ska kunna läsa den riktiga klientens IP, glöm inte att slå på inställningen för betrodd proxy (trust proxy) i ramverket du använder.
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 och cache
När serverblocket fungerar är nästa steg att gå över till HTTPS med ett gratis certifikat. Certbots Nginx-tillägg hämtar certifikatet och lägger till 443-blocket och omdirigeringen åt dig; stegen har vi gått igenom i guiden installera SSL-certifikat.
För hastigheten gör gzip-komprimering och långlivade cachehuvuden för statiska filer stor skillnad. Att placera domänen bakom ett CDN som Cloudflare levererar också statiskt innehåll från platser nära besökaren; installationen hittar du i artikeln installera Cloudflare.
- Använder du versionsfingeravtryck i filnamnen (t.ex. app.3f9a.css) kan du förlänga cachetiden ännu mer.
- Cacha inte HTML-filer under lång tid; annars når uppdateringar besökaren 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";
}Grundläggande säkerhetsinställningar
Standardinstallationen fungerar, men några enkla inställningar innan du går live minskar angreppsytan tydligt. Ingen av dem kräver extra programvara; det räcker att lägga till några rader i konfigurationen.
Det första är att stänga av server_tokens; då syns inte Nginx-versionsnumret på felsidor och i huvuden. Lägg därefter till ett standardblock som tar emot förfrågningar med odefinierade domännamn. Det blocket hindrar botar som kommer direkt till serverns IP-adress från att se din första sajt.
Det är också viktigt att stänga åtkomsten till dolda filer. En .git-mapp eller .env-fil som av misstag blivit kvar i rotmappen kan göra din källkod eller dina databaslösenord tillgängliga för alla. Sådana läckor beror oftast inte på ond vilja utan på en uppladdning som gjorts i all hast.
Slutligen: uppdatera serverns paket regelbundet och håll bara de portar öppna som du verkligen behöver. När du lanserar ett projekt inom webbdesign eller en e-handelsplattform minskar det i hög grad överraskningar i efterhand att gå igenom den här checklistan från början varje gång.
# /etc/nginx/nginx.conf, inuti http-blocket
server_tokens off;
# Standardblock som avvisar odefinierade domännamn
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 444;
}
# Inuti sidans block: stäng dolda filer
location ~ /\.(?!well-known) {
deny all;
}Utvecklingsmiljö på macOS och Windows
Även om produktionsservern oftast är Linux går det snabbare att testa konfigurationen lokalt. Nginx som installerats med Homebrew på macOS lyssnar som standard på port 8080, och konfigurationsfilen ligger i mappen etc/nginx under Homebrew-prefixet.
För Windows finns en build på nginx.org, men den officiella dokumentationen anger att den versionen har begränsningar. Det mest praktiska på Windows är att köra Linux-versionen via Docker eller WSL; då testar du i samma miljö som produktionsservern.
macOS (Homebrew)
brew install nginx
brew services start nginx
nginx -t
# Konfigurationsmapp
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:8080Vanliga fel och lösningar
Första steget vid felsökning är alltid att kontrollera syntaxen med sudo nginx -t och därefter filen error.log. De flesta problem löses med ett enda meddelande där.
| Symptom | Trolig orsak och lösning |
|---|---|
| 502 Bad Gateway | Applikationen bakom körs inte eller porten är fel; kontrollera applikationen och adressen i proxy_pass. |
| 403 Forbidden | Mapprättigheterna räcker inte eller indexfilen saknas; kontrollera ägarskap och index-raden. |
| Address already in use | Port 80 används av en annan tjänst; hitta den med ss -tlnp och stoppa den. |
| conflicting server name | Samma server_name är definierad i två block; ta bort dubbletten. |
| 413 Request Entity Too Large | Den uppladdade filen överskrider gränsen; höj värdet på client_max_body_size. |
sudo nginx -t
sudo tail -n 50 /var/log/nginx/error.log
sudo ss -tlnp | grep -E ':80|:443'Vanliga frågor
01Är Nginx eller Apache bättre?
Båda är mogna och pålitliga servrar. Nginx står sig bäst vid mycket samtidig trafik och som reverse proxy, medan Apache med stöd för .htaccess ger flexibilitet på delat webbhotell. Många infrastrukturer använder båda tillsammans.
02Vad är skillnaden mellan restart och reload?
reload läser in den nya konfigurationen utan att avbryta pågående anslutningar; den bör föredras vid dagliga ändringar. restart stoppar tjänsten helt och startar om den och kan orsaka ett kort avbrott.
03Hur många sajter kan jag hysa på en server?
Gränsen sätts av serverns resurser, inte av Nginx. Du kan köra många sajter på samma maskin genom att skapa ett separat serverblock för varje domän; när trafiken ökar behöver du följa minnes-, processor- och diskanvändningen.
04Kan man göra lastbalansering med Nginx?
Ja. Definierar du flera applikationsservrar i ett upstream-block och dirigerar till den gruppen med proxy_pass fördelar Nginx förfrågningarna mellan servrarna. Standardmetoden är turordning; med metoder som least_conn eller ip_hash kan du ändra beteendet.
Ett korrekt installerat Nginx ger en snabb, säker grund som kan bära flera applikationer. Vill du hantera serverinställningar, cache och mål för Core Web Vitals tillsammans, titta på vår tjänst hastighet och prestanda. För ett skräddarsytt system som körs på din egen server eller färdiga Aurora-lösningar som ett hotellsystem kan du nå oss via sidan kontakt.


